Ruby on rails Phusion乘客错误:您已激活机架1.2.1,但您的Gemfile需要机架1.2.2

Ruby on rails Phusion乘客错误:您已激活机架1.2.1,但您的Gemfile需要机架1.2.2,ruby-on-rails,ruby,rubygems,passenger,dreamhost,Ruby On Rails,Ruby,Rubygems,Passenger,Dreamhost,我正在尝试在Dreamhost共享服务器上运行Ruby on Rails应用程序。到目前为止,一切都很好,除了一个奇怪的错误,我还没有解开 有时,当我访问web应用程序时,我会看到一个Phusion乘客错误,说 您已经激活了rack 1.2.1,但您的Gemfile需要rack 1.2.2。考虑使用束Exc. 当我刚刚刷新页面时,它似乎工作了,但是-没有更多的Phusion乘客错误消息 继其他堆栈溢出线程和类似线程之后,我在config/environment.rb文件的顶部添加了以下内容:

我正在尝试在Dreamhost共享服务器上运行Ruby on Rails应用程序。到目前为止,一切都很好,除了一个奇怪的错误,我还没有解开

有时,当我访问web应用程序时,我会看到一个Phusion乘客错误,说

您已经激活了rack 1.2.1,但您的Gemfile需要rack 1.2.2。考虑使用束Exc.

当我刚刚刷新页面时,它似乎工作了,但是-没有更多的Phusion乘客错误消息

继其他堆栈溢出线程和类似线程之后,我在
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

在编辑gem文件后尝试重新启动服务器,并将以下内容放入:
gem'rack',1.2.1'
我刚刚在Dreamhost上遇到这个问题。问题是Dreamhost服务器安装了rack 1.2.1,而您的Gemfile正在加载1.2.2。我发现如果我只安装机架:

gem install rack

然后最新版本的rack(目前为1.2.2)将安装到您的主gems文件夹(~/.gems)。当乘客启动时,它将使用1.2.2。

这可能值得检查一下。有人设法让调试器使用Passenger&Rails 3-

在长时间不活动之后,我在DreamHost VPS上的几个Sinatra应用程序中收到了类似的错误:

Phusion乘客错误:您已激活rack 1.2.1,但您的Gemfile需要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/
[psXXXXX]$gem env
RubyGems环境:
-RUBYGEMS版本:1.3.6
-RUBY版本:1.8.7(2008-08-11 patchlevel 72)[x86_64-linux]
-安装目录:/home/XXXXXXXXX/.gems/
-RUBY可执行文件:/usr/bin/ruby1.8
-可执行目录:/home/XXXXXXXXX/.gems/bin
-RUBYGEMS平台:
-红宝石
-x86_64-linux
-宝石路径:
-/home/XXXXXXXXX/.gems/true
-:benchmark=>false
-:backtrace=>false
-:批量_阈值=>1000
-远程来源:
- http://rubygems.org/
我猜测,在乘客“醒来”后,出于某种原因,它首先(或可能只是)在系统级别上查看Gems,选择Rack 1.2.1作为最新版本。我的短期黑客解决方案只是在那里安装Rack 1.3.0:

gem安装框架-v1.3.0--install dir/usr/lib/ruby/gems/1.8

这似乎奏效了。希望这对其他人有帮助。

我也有同样的问题:“您已经激活了rack 1.2.1,但您的Gemfile需要rack 1.2.3”

  • 添加到gem文件:gem“机架”、“1.2.1”
  • 包更新
  • 卸载机架版本>1.2.1

    [wasp]$gem list |格雷普机架

    机架(1.2.1、1.1.0、1.0.1、1.0.0)

  • 触摸tmp/restart.txt

  • :)快乐

  • 我和Apache有类似的问题:“您已经激活了1.2.3机架,但是您的GEMFILE需要机架1.2.2。考虑使用捆绑Excel。”

    问题在于乘客安装机架1.2.3和我的rails应用程序机架1.2.2:

    $ gem list |grep rack
    rack (1.2.2, 1.2.3)
    
    尝试:


    重新启动服务器并解决问题

    我在Dreamhost上以这种方式解决:

    从Gemfile中删除任何行:gem'rack'

    rm Gemfile.lock
    rm -rf .bundle
    rm -rf  vendor/bundle
    
    本地安装/使用gems,并使用以下命令重新生成文件“Gemfile.lock”:

    bundle install
    
    在供应商/捆绑包中安装gems

    bundle install --deployment
    
    重新启动:

    touch tmp/restart.txt
    

    我与这个问题斗争了好几个小时,最终放弃了对乘客的要求。任何新版本的Rails都将使用比Dreamhost的乘客所需的更新机架

    但是,启动应用程序不需要乘客。Dreamhost提供了一些关于如何使用FastCGI引导应用程序的非常简单(且有效)的说明,您不必在引导过程中损坏您的GEM文件:


    这适用于Rails 3.0.x和Passenger 3.0.15

    创建一个文件:

    config/setup_load_paths.rb
    
    内容包括:

    require 'rubygems'
    require 'bundler/setup'
    

    然后,乘客将加载gem文件中指定的机架gem。锁定

    当我在生产服务器上执行
    捆绑安装
    时,我得到以下信息:
    您已请求:机架=1.2.1捆绑当前机架锁定在1.2.2。尝试运行“bundle update rack”
    ,因此我运行了命令
    bundle update rack
    ,我认为所有内容都已成功更新。此错误的问题是需要一些时间才能重现(我知道这很奇怪)-我会返回给您以验证这是否是解决方案。删除
    Femfile.lock
    ,然后尝试
    捆绑安装
    。因为Gemfile.lock有gem的信息和当前用于rails应用程序的版本,这是由第一个bundle命令生成的。我将尝试一下,尽管@Surya有一个看似有效的解决方案。我尝试了这个解决方案,但几天后仍然出现了错误的机架错误。我的站点现在工作正常+我相信这是正确的答案(参见)。我通过阅读
    lib/phusion\u passenger/utils.rb
    自己解决了这个问题,但后来当我再次遇到这个问题时就忘了。谢谢你的提醒。当您被迫在不同的机架版本上运行应用程序时,此方法尤其有效。
    require 'rubygems'
    require 'bundler/setup'