gem由脚本/控制台初始化加载,但不是服务器初始化

时间:2009-12-14 01:52:53

标签: ruby-on-rails ruby gem

我正在将一个rails应用程序从我的桌面移动到共享主机,并且我遇到了与gem依赖的问题。

我在我的环境中声明了这个.rb:

config.gem "icalendar"

当我第一次尝试启动应用程序的控制台时,我收到错误消息,请求我耙:安装gem。我使用共享托管gem安装过程在〜/ ruby​​ / gems中安装gem并确认gem在那里。

ls -rlt ~ruby/gems/gems/icalendar-1.1.0/
total 64
drwxr-xr-x 4 user user  4096 Dec 12 13:15 docs/
drwxr-xr-x 3 user user  4096 Dec 12 13:15 ../
drwxr-xr-x 5 user user  4096 Dec 12 13:18 test/
drwxr-xr-x 3 user user  4096 Dec 12 13:18 lib/

(我在这里手动替换了实际的用户/组)

然后我将其添加到我的environment.rb:

ENV['GEM_PATH'] = "/home/USER/ruby/gems"

(再次,实际用户更换)

下次我运行脚本/控制台时,应用程序加载正常。然后我尝试启动服务器,并收到此错误:

Missing these required gems:
icalendar

You're running:
ruby 1.8.7.22 at /usr/bin/ruby
rubygems 1.3.5 at /home/USER/ruby/gems, /usr/lib/ruby/gems/1.8

我尝试稍微调整路径,但这没有任何影响。我在这里和谷歌大概戳了一下,并没有看到任何直接解决这个问题的东西 - 我认为控制台和服务器都会在环境配置中使用GEM_PATH。看起来不像权限问题。有任何想法吗?感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

如果您正在使用Passenger,您应该使用一个小技巧来使GEM_PATH环境变量正常工作。 关注this tutorial

答案 1 :(得分:0)

在类似的情况下(当服务器启动时,一些pathes不包含在LOAD_PATH变量中) 添加

require 'rubygems'

在包括其他宝石之前帮助了我。

或者您可以手动添加宝石的路径

$LOAD_PATH << '/home/USER/ruby/gems/gems/icalendar-1.1.0/lib'

答案 2 :(得分:0)

请务必在初始化程序段之前设置环境变量

ENV['GEM_PATH'] = '...'
Gem.clear_paths

Rails::Initializer.run ...