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'

这里发生了什么?

编辑: 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 中需要记录器都没有问题:

# 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 以 root(或 www-data)运行 ruby​​ 进程,确保您没有将 Gem 安装在本地存储库中。

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


答案 2:

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

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

你对两者都使用相同版本的红宝石吗?

于 2010-09-02T20:13:46.773 回答
0

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

于 2010-09-07T17:55:58.243 回答