0

刚刚通过 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 myappbundle 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"
4

2 回答 2

1

该错误与/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​​,要么它可能被破坏了。

你确定1.9.3-p362用红宝石吗?RVM 为1.9.3-p327静态编译的 OSX 10.8 提供(OSX 上没有包管理器问题)。也许你用那个版本(p327)代替?

至于重新安装 gems - 目前还没有一个命令可以强制在 bundler 中重新安装已安装的 gems,但是您可以删除 gems 并强制重新安装:

cd /Library/WebServer/rails/myapp/
rm -rf shared/bundle
bundle install
于 2013-01-04T05:09:54.973 回答
0

尝试rvm list列出所有 ruby​​ 版本

然后使用rvm use <ruby version>该版本

前任:

[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

高温高压

于 2013-01-04T04:51:40.997 回答