1

Rails アプリケーション (開発では問題なく動作します) を運用サーバーにデプロイしようとしています。Apache、Passenger、および必要な gem をインストールして構成しました。Apache を再起動してサーバーに移動すると、次のエラーが表示されます。

Exception PhusionPassenger::UnknownError in PhusionPassenger::Railz::ApplicationSpawner (no such file to load -- money (MissingSourceFile))

gem list moneyショー:

*** LOCAL GEMS ***

money (3.0.5)

サーバー上のirbセッション:

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'money'
=> true

この宝石は次の場合に必要ですconfig/environment.rb:

require 'money'

何が起きてる?

編集:宝石はルートとしてインストールされました:

# ls -l /usr/lib/ruby/gems/1.8/gems/money-3.0.5/lib
total 8
drwx------ 2 root root 4096 Sep  2 10:26 money
-rw-r--r-- 1 root root 1284 Sep  2 10:26 money.rb

編集 2:そのロードブロッキングで成功しなかった後、Passenger は Ruby Enterprise Edition に合わせて作成されていることに気付いたので、それをインストールしてみました。その後、Ruby Enterprise のバージョンの gem を使用して、必要なすべての gem をインストールしました。Apache を再起動してサーバーに移動すると、次のようになります。

Exception LoadError in PhusionPassenger::Railz::ApplicationSpawner (no such file to load -- logger)

Rubyの古いバージョンでも新しいバージョンでも、ロガーを必要とすることに問題はありません。

# which irb
/usr/bin/irb
# irb
irb(main):001:0> require 'logger'
=> true
irb(main):002:0> exit
# /opt/ruby-enterprise-1.8.7-2010.02/bin/irb 
irb(main):001:0> require 'logger'
=> true

パスまたはアクセス許可で何かが起こっているに違いありませんが、私は Passenger と Ruby Enterprise Edition の両方のインストーラーの指示に正確に従いました。他のアイデアはありますか?

4

3 に答える 3

2

Apache/Passenger は ruby​​ プロセスを root (または www-data) として実行します。Gem をローカル リポジトリにインストールしていないことを確認してください。

gem をインストールする前に、おそらくスーパーユーザーになる必要があります。


答え 2:

Gem を要求する正しい方法は、require を使用するのではなく、

config.gem "money"
于 2010-09-02T18:56:18.450 に答える
1

両方に同じバージョンの Ruby を使用していますか?

于 2010-09-02T20:13:46.773 に答える
0

ご協力ありがとうございます。さらに調査したところ、必要なファイルの一部 (gem 自体だと思います) が間違ったパーミッションでインストールされていることがわかりました (Apache/Passenger を実行しているユーザーには読み取れません)。ルートとして通常の方法でインストールされたので(おそらく非標準のumaskが問題だったのでしょうか?)、なぜそれが起こったのかわかりませんが、これらのファイルのアクセス許可を変更すると問題が解決しました。

于 2010-09-07T17:55:58.243 に答える