web-dev-qa-db-ja.com

Rails 3:乗客は、バンドルによってインストールされたgit gemを見つけることができません

Rails 3.0.0、Passenger 2.2.15:

  • 新しいRailsプロジェクトを作成します
  • gem 'Paperclip', :git => 'git://github.com/lmumar/Paperclip.git', :branch => 'Rails3'をGemfileに追加します
  • bundle installを実行
  • Rails/script serverで始まるすべての問題はなく、アクセスも機能します
  • ただし、Passengerでアクセスすると、次のように表示されます。

git://github.com/lmumar/Paperclip.git(Rails3)はチェックアウトされていません。 bundle installを実行してください(Bundler :: GitError)

bundler pack(助けにはならない)を試して、BUNDER_HOMEを〜/ .bundler(Paperclip gitはbundler installによってそこにインストールされます)を.htaccessとconfig/*。rbのさまざまな場所に設定しましたが、これも成功しませんでした。

〜/ .bundlerは、Railsプロジェクト(Passengerがこのユーザーで実行されます)プロジェクトと同じユーザーが所有しているため、権限の問題になることはありません。Sudoはbundle installによってインストールされ、呼び出されます。

ヒントはありますか?

46
junique

解決策(数時間かかった):

マーレ確かにRails_ROOT/.bundle/config(SetEnvなどは私には機能しませんでした)には以下が含まれます:

--- 
BUNDLE_PATH: /home/xxxxx/.bundler

BUNDLER_PATHではなくBUNDLE_PATHに注意してください! DISABLED_SHARED_GEMS = 1エントリもあったため、削除しました。

次に、Bundlerは、Passengerからロードされた場合でも正しいパスを認識します。 Passengerがなければ、常に機能しました(質問で述べたように、/ home/xxxxx/.bundlerを使用しました)

22
junique

私はこの問題を抱えていました、使用して解決してください

bundle --deployment

ベンダー/バンドルに宝石をインストールします

70
Roberto

システムの宝石ではなく、bundle install --path vendor/bundleを使用して宝石をローカルにインストールできます。

ただし、システムgemを使い続けたい場合は、Apache構成の1行でPassengerにシステムgemの場所を通知します。

SetEnv GEM_HOME /Users/bob/.bundle

GEM_HOMEを設定してPassengerを使用する にある私のブログには、もう少し手の込んだ記事があります。

8
indirect

Sinatraアプリの作成中にこの問題に遭遇しました。それを解決するために、この行をconfig.rに追加しました。

require 'bundler/setup'
4
declan

私は同じ問題を抱えていましたが、それはRVMの権利の問題が原因でした。

Webサーバーを実行するユーザーは、GIT gemが使用可能かどうかを確認できません。ウェブユーザーを利用して「乗客」として実行するため、このチェックは行えません。

私が見つけた解決策は、Webユーザーをrvmグループに追加することでした:

usermod -a -G rvm Apache

これが、GEMを「ベンダー/バンドル」にデプロイしたくない他の人々の助けになることを願っています。

0
Code-Source

私は旅客の宝石とそのApacheモジュールをSudoユーザーとしてインストールしましたが、私の場合はそれが問題でした。

最初にSudoを使用したのは、railscastsのエピソード122からコードをコピーしたからです。Soduアクセスなしでインストールすると、この問題は解決しました。 Rubyは、システムにSudoアクセスなしでrvmを使用してインストールされたため。

0
Rishinder