我正在尝试将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安装程序中的说明进行操作。还有其他想法吗?
答案 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问题?),但更改这些文件的权限可以解决问题。