Phusion Passenger Error:您已激活机架1.2.1,但您的Gemfile需要机架1.2.2

我正在尝试在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 

在此处输入图像描述

尝试在Gemfile中编辑后重新启动服务器并将其放入: gem 'rack', '1.2.1'

这适用于Rails 3.0.x和Passenger 3.0.15

创建一个文件:

 config/setup_load_paths.rb 

内容:

 require 'rubygems' require 'bundler/setup' 

然后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/ 

我猜测发生了什么事,在乘客“醒来”之后,出于某种原因,它首先 (或者可能 )看到系统级别的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

它似乎有效。 希望这对其他人撕裂他们的头发很有帮助。

我有同样的问题:“你已经激活了机架1.2.1,但你的Gemfile需要机架1.2.3”

  1. 添加到Gemfile:gem’ rack’,’1.2.1′
  2. 捆绑更新
  3. 卸载机架版本> 1.2.1

    [wasp] $ gem list | grep rack

    机架(1.2.1,1.1.0,1.0.1,1.0.0)

  4. touch tmp / restart.txt

  5. :)开心

我在Dreamhost上解决了这个问题:

从Gemfile中删除任何行:gem’ rack’,….

 rm Gemfile.lock rm -rf .bundle rm -rf vendor/bundle 

在本地安装/使用gems并使用以下命令重新生成文件’Gemfile.lock’:

 bundle install 

在vendor / bundle中安装gem

 bundle install --deployment 

重新开始:

 touch tmp/restart.txt 

我刚刚在Dreamhost上遇到了这个问题。 问题是Dreamhost服务器安装了机架1.2.1,并且您的Gemfile正在加载1.2.2。 我发现如果我只是安装机架:

 gem install rack 

然后将最新版本的机架(目前为1.2.2)安装到您的home gems文件夹(〜/ .gems)。 当乘客启动时,它将使用1.2.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 

重启服务器并解决了

在最终放弃乘客之前,我与这个问题斗争了好几个小时。 任何新版本的Rails都将使用比Dreamhost的Passenger更新的Rack。

但是,您不需要Passenger来启动应用程序。 Dreamhost提供了一些关于如何使用FastCGI启动应用程序的非常简单(和工作)的说明,并且您不必在此过程中损坏您的Gemfile:

http://wiki.dreamhost.com/Rails_3#Using_FastCGI

这可能值得一试。 有人试图让调试器与Passenger&Rails 3一起工作 – http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger