are*_*555 22 ruby rubygems ruby-on-rails passenger dreamhost
我正在尝试在Dreamhost共享服务器上运行Ruby on Rails应用程序.到目前为止一切都很好,除了一个我无法解开的奇怪的错误.
有时当我访问网络应用程序时,我收到一个Phusion Passenger错误说,
您已经激活了机架1.2.1,但您的Gemfile需要机架1.2.2.考虑使用bundle exec.
当我只是刷新页面时,它似乎工作,但没有更多的Phusion Passenger错误消息.
在其他堆栈溢出线程和类似的Dreamhost wiki之后,我将以下内容添加到config/environment.rb文件的顶部:
if ENV['RAILS_ENV'] == 'production' # don't bother on dev
ENV['GEM_PATH'] = '/home/myusername/.gems' + ':/usr/lib/ruby/gems/1.8'
end
Run Code Online (Sandbox Code Playgroud)

这适用于Rails 3.0.x和Passenger 3.0.15
创建一个文件:
config/setup_load_paths.rb
Run Code Online (Sandbox Code Playgroud)
内容:
require 'rubygems'
require 'bundler/setup'
Run Code Online (Sandbox Code Playgroud)
然后Passenger将加载Gemfile.lock中指定的rack gem
经过长时间的不活动,我在DreamHost VPS上收到了几个Sinatra应用程序的类似错误:
Phusion Passenger Error: You have activated rack 1.2.1, but your Gemfile requires rack 1.3.0.
就像@ aren55555描述的那样,如果你只是刷新页面,那么错误就会消失.以下是我发现的有关服务器配置的内容:
[psXXXXX]$ gem env
RubyGems Environment:
- RUBYGEMS VERSION: 1.3.6
- RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/XXXXXXXXX/.gems/
- RUBY EXECUTABLE: /usr/bin/ruby1.8
- EXECUTABLE DIRECTORY: /home/XXXXXXXXX/.gems/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/XXXXXXXXX/.gems/ <-- Rack 1.3.0 Gem was installed here
- /usr/lib/ruby/gems/1.8 <-- Rack 1.2.1 Gem was installed here
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
Run Code Online (Sandbox Code Playgroud)
我猜测发生的事情是,在乘客"醒来"之后,由于某种原因,它首先(或者可能只)看到系统级别的Gems,选择Rack 1.2.1作为最新版本.我的短期hacky解决方案只是在那里安装Rack 1.3.0:
gem install rack -v 1.3.0 --install-dir /usr/lib/ruby/gems/1.8
它似乎有效.希望这对其他人撕裂他们的头发很有帮助.
小智 5
我有同样的问题:"你已经激活了机架1.2.1,但你的Gemfile需要机架1.2.3"
卸载机架版本> 1.2.1
[wasp] $ gem list | grep rack
机架(1.2.1,1.1.0,1.0.1,1.0.0)
touch tmp/restart.txt
| 归档时间: |
|
| 查看次数: |
6691 次 |
| 最近记录: |