由脚本/控制台初始化加载的gem,但不是服务器初始化
问题描述:
我正在从我的桌面移动一个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。看起来不像权限问题。有任何想法吗?感谢您的帮助。
答
一定要设置环境变量前初始化块:
ENV['GEM_PATH'] = '...'
Gem.clear_paths
Rails::Initializer.run ...
答
如果你使用的是Passenger,你应该使用一个小技巧来让GEM_PATH环境变量工作。 按照this tutorial。
在类似的情况(在服务器启动后,一些pathes没有被列入LOAD_PATH变量) 包括其他宝石之前添加require 'rubygems'
答
帮助了我。
,或者你可以手动添加路径到你的宝石
$LOAD_PATH << '/home/USER/ruby/gems/gems/icalendar-1.1.0/lib'
是的,我被指定ENV [“GEM_PATH” ]位于文件顶部。看起来已经修复它也是添加Gem.clear_paths。谢谢! – greg 2009-12-16 04:34:44