刚刚通过 RVM 在登台服务器上更新了 Ruby:
$ rvm upgrade 1.9.3-p327 1.9.3-p362
我对所有迁移和别名问题说“是”,包括删除旧的 Ruby。
现在每当我尝试访问 Rails 应用程序时都会从乘客那里收到错误:
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 ...并且还运行cap deploy
了稍微更新Gemfile
的 . 但似乎仍然有一些对旧 Ruby 的引用。这里发生了什么以及如何更新或重新编译,以便 gem 等引用新的 Ruby?我可以在 Capistrano 中指定一些标志来强制重新编译 gem(假设这是问题所在)?
编辑(添加一些 RVM 信息):
我在此服务器上使用RVM的“多用户”安装,因此 gem 安装在:/Library/WebServer/rails/popup/shared/bundle/ruby/1.9.1/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"