我正在尝试在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
答案 0 :(得分:9)
尝试在Gemfile中编辑后重新启动服务器并将其放入:gem 'rack', '1.2.1'
答案 1 :(得分:7)
这适用于Rails 3.0.x&乘客3.0.15
创建一个文件:
config/setup_load_paths.rb
内容:
require 'rubygems'
require 'bundler/setup'
Passenger将加载Gemfile.lock
中指定的rack gem答案 2 :(得分:5)
经过长时间的不活动,我在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/
我猜测发生的事情是,在乘客“醒来”之后,出于某种原因,它正在向系统中的宝石看第一个(或者可能仅) -level,选择Rack 1.2.1作为最新版本。我的短期hacky解决方案只是在那里安装Rack 1.3.0:
gem install rack -v 1.3.0 --install-dir /usr/lib/ruby/gems/1.8
似乎有效。希望这对任何在那里撕裂头发的人都有帮助。
答案 3 :(得分:5)
我有同样的问题:“你已经激活了机架1.2.1,但你的Gemfile需要机架1.2.3”
卸载机架版本&gt; 1.2.1
[wasp] $ gem list | grep rack
rack(1.2.1,1.1.0,1.0.1,1.0.0)
触摸tmp / restart.txt
答案 4 :(得分:3)
我在Dreamhost上解决了这个问题:
从Gemfile中删除任何一行:gem'bag',....
rm Gemfile.lock
rm -rf .bundle
rm -rf vendor/bundle
在本地安装/使用gems并使用以下命令重新生成文件'Gemfile.lock'。
bundle install
在vendor / bundle中安装gems
bundle install --deployment
重启:
touch tmp/restart.txt
答案 5 :(得分:2)
我刚刚在Dreamhost上遇到了这个问题。问题是Dreamhost服务器安装了机架1.2.1,并且您的Gemfile正在加载1.2.2。我发现如果我只是安装机架:
gem install rack
然后,最新版本的机架(目前为1.2.2)将安装到您的home gems文件夹(〜/ .gems)。当乘客启动时,它将使用1.2.2。
答案 6 :(得分:2)
我遇到类似Apache的问题:“你已经激活了机架1.2.3,但你的Gemfile需要机架1.2.2。考虑使用bundle exec。”
问题在于Passenger安装机架1.2.3和我的导轨APP机架1.2.2:
$ gem list |grep rack
rack (1.2.2, 1.2.3)
尝试:
$ gem uninstall --version=1.2.3 rack
重启服务器并解决了
答案 7 :(得分:1)
在最终放弃乘客之前,我在这个问题上奋斗了好几个小时。任何新版本的Rails都将使用比Dreamhost的Passenger更新的Rack。
但是,您不需要Passenger来启动应用程序。 Dreamhost提供了一些关于如何使用FastCGI启动应用程序的非常简单(和工作)的说明,并且您不必在此过程中损坏您的Gemfile:
答案 8 :(得分:0)
这可能值得一试。有人想让调试人员使用Passenger&amp; Rails 3 - http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger