Rails / Passenger:没有这样的文件加载 - 钱(MissingSourceFile)

时间:2010-09-02 18:06:46

标签: ruby-on-rails ruby rubygems passenger ruby-enterprise-edition

我正在尝试将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'

这里发生了什么?

编辑:gem以root身份安装:

# 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中使用logger:

# 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安装程序中的说明进行操作。还有其他想法吗?

3 个答案:

答案 0 :(得分:2)

Apache / Passenger以root(或www-data)的形式运行ruby进程,确保没有将Gem安装在本地存储库中。

您可能需要在安装gem之前成为超级用户。


回答2:

要求Gem的正确方法不是使用require,而是使用

config.gem "money"

答案 1 :(得分:1)

你们两个都使用相同版本的ruby吗?

答案 2 :(得分:0)

感谢大家的帮助。我们调查了一些,发现一些必需的文件(我相信宝石本身)安装了错误的权限(运行Apache / Passenger的用户无法读取)。我不确定为什么会发生这种情况,因为它们是以root身份安装的常规方式(可能是一些非标准的umask问题?),但更改这些文件的权限可以解决问题。