在生产中更新了Ruby,现在Rails将无法启动,因为仍然引用旧的ruby

刚刚通过RVM在登台服务器上更新了Ruby:

$ rvm upgrade 1.9.3-p327 1.9.3-p362 

我对所有迁移和别名问题说“是”,包括删除旧的Ruby。

现在,每当我尝试访问Rails应用程序时,都会从Passenger获取错误:

 Error message: dlopen(/Library/WebServer/rails/myapp/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle, 9): Library not loaded: /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.1.9.1.dylib Referenced from: /Library/WebServer/rails/myapp/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle Reason: image not found - /Library/WebServer/rails/myapp/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle 

我已经重新安装了Passenger ……并且还使用稍微更新的Gemfile运行了cap deploy 。 但似乎仍有一些旧Ruby的引用。 这里发生了什么以及如何更新或重新编译,以便gem等引用新的Ruby? 是否有一些我可以在Capistrano中指定的标志会强制重新编译gem(假设这是问题)?

编辑(添加一些RVM信息):

我在这台服务器上使用RVM的“多用户”安装,因此gem安装在: /Library/WebServer/rails/popup/shared/bundle/ruby/1.9.1/gems gems而不是我的位置可能已经预料到了它们: /usr/local/rvm/rubies/ruby-1.9.3-p362/lib/ruby/gems/1.9.1/gems 。 从来没有真正理解RVM在多用户安装中所做的事情,但它已经奏效了。

因此,我不能真正$ rvm gemset use myapp然后bundle install因为我认为不会安装在正确的目录中。

这是Capistranobundle install任务期间的输出:

  * 2013-01-03 19:23:22 executing `bundle:install' * executing "cd /Library/WebServer/rails/myapp/releases/20130104032317 && bundle install --gemfile /Library/WebServer/rails/myapp/releases/20130104032317/Gemfile --path /Library/WebServer/rails/myapp/shared/bundle --deployment --quiet --without development test" 

错误是关于/Library/WebServer/rails/myapp/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/lib/bcrypt_ext.bundle引用非现有文件/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/libruby.1.9.1.dylib这种情况不应该发生,因为在大多数情况下, libruby.1.9.1.dylib应该可以在运行时从ruby加载。 因此,要么您只使用静态编译安装了ruby,要么它可能已损坏。

你确定使用ruby 1.9.3-p362吗? RVM为OSX 10.8提供了1.9.3-p327 ,它是静态编译的(OSX上没有包管理器问题)。 也许您使用的是那个版本( p327 )?

至于重新安装gem – 还没有一个命令可以强制在捆绑器中重新安装已安装的gem,但是你可以删除gem并强制安装新的:

 cd /Library/WebServer/rails/myapp/ rm -rf shared/bundle bundle install 

尝试使用rvm list列出所有ruby版本

然后使用rvm use 来使用该版本

例如:

 [sameera@sameera ~]$ rvm list rvm rubies ruby-1.9.2-p290 [ x86_64 ] => ruby-1.8.7-p357 [ x86_64 ] rvm use rvm use ruby-1.9.2-p290 

HTH