1

我最近为 Rails 3 应用程序设置了一个生产服务器。

在最初的部署中,一切正常。在随后的部署中,没有找到添加到项目中的新 gem。当我分别从新添加的 gem 中引用类和方法时,我遇到了uninitialized constant错误。undefined method

当我最初进行设置时,我使用的是带有 RVM 的 gemset,但我试图通过删除 gemset 并仅使用 RVM 来管理 rubies 来简化事情。

当我跑步时,bundle list一切都在那里。所有的宝石都在<app_root>/shared/bundle/ruby/1.9.1/gems/

似乎它可能正在从其他位置加载宝石,例如原始宝石集,但我已将其删除。

其他一些细节,我用的是 Capistrano,当然是 Unicorn,我的GEM_HOME=/home/deployer/.rvm/gems/ruby-1.9.3-p286

让我知道我是否可以提供任何其他信息。

谢谢。

4

2 回答 2

0

如果您使用bundle install --deploymentthen 您还必须bundle exec在执行命令时为命令添加前缀,例如:

bundle exec rake db:migrate

如果您使用bundler/capistrano集成,那么它会为您完成,capistano但在控制台中您需要bundle exec手动使用。

RVM 使用ruby​​gems-bundler gem帮助您避免它- 但您更改了 gemset,因此生成的包装器不再可用。您必须清理<app_root>/shared/bundle/ruby/1.9.1/gems/bundle install再次运行以重新生成包装器以避免bundle exec再次输入。

于 2013-03-13T17:53:31.340 回答
0

我有类似的问题。事实证明 Capistrano 没有正确重启独角兽。SSH 进入服务器并停止然后启动独角兽就完成了这项工作。现在要找到解决 Capistrano 恶作剧的方法……

于 2013-11-18T08:18:07.063 回答