カスタム gem を使用した Dreamhost/Passenger への Sinatra アプリのデプロイ
質問
ポニーを利用して電子メールを送信する Sinatra アプリを Dreamhost で実行しようとしています。アプリケーションを最初に (ポニーを追加する前に) 起動して実行するには、次のことを行う必要がありました。 gem unpack rack
そして gem unpack sinatra
これが私の config.ru でした。
require 'vendor/rack/lib/rack'
require 'vendor/sinatra/lib/sinatra'
set :run, false
set :environment, :production
set :views, "views"
require 'public/myapp.rb'
run Sinatra::Application
すでにやりました gem install pony
そして gem unpack pony
(ベンダー/に)。その後、追加してみました require 'vendor/sinatra/lib/pony'
乗客にポニーについて苦情を言わせるためだけに config.ru に送信する 依存関係 (MIME タイプ、Tmail) も見つかりません。
そこには もっている 他の宝石を使用し、長くて醜く冗長な宝石をトーンダウンするより良い方法になるように requires
. 。何かご意見は?
解決
私はあなたのconfig.ru
でそれを追加し、「どこかに」あなた自身の宝石のパスを作成することをお勧めしたいです
同様ます:
ENV['GEM_PATH'] = xxx
Gem.clear_paths
そのにあなたの宝石をインストール
他のヒント
Dreamhostの上でRubyの宝石をインストールします。
http://c.kat.pe/post/インストール・ルビー宝石オンDreamhostの/ の
変更config.ru(シナトラ1.0のために動作します)。
が必要です 'RubyGemsの'
'sinatra.rb / libに/シナトラベンダー/' が必要です。
ENV['GEM_HOME'] = '/home/username/.gems'
ENV['GEM_PATH'] = '$GEM_HOME:/usr/lib/ruby/gems/1.8'
require 'rubygems'
Gem.clear_paths
disable :run, :reload
set :environment, :production
require 'yourapp'
run Sinatra::Application
それは誰かがお役に立てば幸いです。
私はポニーと私のシナトラのために他の宝石の多くを使用しています。それはあまりにもあなたのためにうまく動作するはずです。それはあなたの設定に追加する必要がちょうどそれらの2つのライン(GEM_HOMEとGEM_PATH)です。
「gem install sinatra」を使用するだけで、gem がローカルの gem インストール ディレクトリを使用する必要があることを (システム ディレクトリが読み取り専用であるため) 認識してくれるということを知るまでに長い時間がかかりました。今のところ、特に特別な環境を設定する必要はないようです。$HOME/.gem をローカル gem パスとして使用することが判明し、すべてが正常に機能します。「ベンダー/スタッフ」を要求する必要はまったくありません。gem によってインストールされたバイナリを実行するには、$HOME/.gem/ruby/1.8/bin をパスに追加する必要があることがわかりました。
これが私のconfig.ruです(Dreamhost用)
## Passenger should set RACK_ENV for Sinatra
require 'test'
set :environment, :development
run Sinatra::Application
後で編集:これはこれで問題ありませんが、問題が残ります。 ジョブの最初の開始時に乗客が私の宝石を見つけられない.
私のconfig.ruは同じくらい簡単です
require 'rubygems'
require 'vendor/sinatra/lib/sinatra.rb'
require 'app.rb'
とapp.rb頭部ます:
require 'yaml'
require 'haml'
require 'ostruct'
require 'date'
require 'pp'
module FlytoFB
log = File.new("sinatra.log", "a")
STDOUT.reopen(log)
STDERR.reopen(log)
configure do
enable :logging, :dump_errors
set :app_file, __FILE__
set :reload, true
set :root, File.dirname(__FILE__)
set :environment, :production
set :env, :production
set :run, false
set :raise_errors, true
set :public, 'public'
error do
e = request.env['sinatra.error']
puts e.to_s
puts e.backtrace.join("\n")
"Application Error!"
end
not_found do
"Page not found!"
end