2009-12-14 32 views
0

我正在从我的桌面移动一个rails应用程序到共享主机,并且我遇到了gem依赖关系的问题。由脚本/控制台初始化加载的gem,但不是服务器初始化

我在environment.rb中这样宣称:

config.gem "icalendar" 

当我第一次尝试启动一个控制台应用程序,我得到了错误信息,要求我耙:安装宝石。我使用共享托管gem install过程在〜/ 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/ 

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

我然后将此添加到我的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。看起来不像权限问题。有任何想法吗?感谢您的帮助。

回答

0

一定要设置环境变量前初始化块:

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

Rails::Initializer.run ... 
+0

是的,我被指定ENV [“GEM_PATH” ]位于文件顶部。看起来已经修复它也是添加Gem.clear_paths。谢谢! – greg 2009-12-16 04:34:44

0

如果你使用的是Passenger,你应该使用一个小技巧来让GEM_PATH环境变量工作。 按照this tutorial

在类似的情况(在服务器启动后,一些pathes没有被列入LOAD_PATH变量) 包括其他宝石之前添加

require 'rubygems' 

0

帮助了我。

,或者你可以手动添加路径到你的宝石

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