在生产中更新了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
因为我认为不会安装在正确的目录中。
这是Capistrano在bundle 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