我最近为Rails 3应用设置了生产服务器。
在最初的部署中,一切正常。 在随后的部署中,找不到添加到项目中的新gem。 当我分别从新添加的gem中引用类和方法时,出现uninitialized constant
和undefined method
错误。
当我最初进行设置时,我使用的是带有RVM的gemset,但是试图通过删除gemset并仅使用RVM来管理红宝石来简化事情。
当我运行bundle list
所有东西都在那里。 所有的宝石都在<app_root>/shared/bundle/ruby/1.9.1/gems/
似乎它是从其他位置加载宝石,例如原始宝石集,但我已将其删除。
其他一些细节,我正在使用Capistrano,当然是独角兽,我的GEM_HOME=/home/deployer/.rvm/gems/ruby-1.9.3-p286
让我知道是否可以提供其他信息。
谢谢。
如果使用bundle install --deployment
则在执行命令时还必须在命令前加上bundle exec
,例如:
bundle exec rake db:migrate
如果您使用bundler/capistrano
集成,那么它会在capistano
为您完成,但是在控制台中,您需要手动使用bundle exec
。
RVM可以帮助您避免使用rubygems-bundler gem-但是您更改了gemset,因此不再提供生成的包装器。 您将必须清理<app_root>/shared/bundle/ruby/1.9.1/gems/
并再次运行bundle install
以重新生成包装程序,以避免再次键入bundle exec
。
我有类似的问题。 事实证明,Capistrano无法正确重启独角兽。 SSH进入服务器,然后停止然后启动独角兽就完成了这项工作。 现在找到Capistrano的恶作剧的修复方法...