DreamHost、Passenger 和 Rails 3.0.0.rc 出现 Rack 错误

DreamHost、Passenger 和 Rails 3.0.0.rc 出现 Rack 错误

背景:我已经查看这个问题这个——遗憾的是,无济于事。

错误信息(乘客):您已激活 rack 1.1.0,但您的 Gemfile 需要 rack 1.2.1。请考虑使用 bundle exec。

我的Gem文件:

source 'http://rubygems.org'

gem 'rails', '3.0.0.rc'
gem 'nifty-generators' 
gem 'nokogiri'
group :after_initialize do
 gem 'feedzirra'
end

我的 Gemfile.lock 有这一行:

rack (1.2.1)

我的 environment.rb 顶部有这一行:

ENV['GEM_PATH'] = File.expand_path('~/.gems') + ':/usr/lib/ruby/gems/1.8'

我的 boot.rb 顶部有这一行:

Gem.clear_paths

我已经在本地正确安装了 rack (1.2.1) - 我的应用程序在本地主机上运行良好,并且版本 1.2.1 显示在终端中的“gem 列表”后面。

在将我的应用推送到生产服务器之前,我已经将我的 gem 用“捆绑包”打包了。

我在部署之前运行了以下命令(在我的生产服务器上,从应用程序的根目录):

bundle install --path vendor/bundle --local

按照上面的安装命令,“捆绑检查”返回以下内容:

The Gemfile's dependencies are satisfied

这是乘客提供的回溯(以及上面提到的错误消息):

0   /home/bbahry/.gems/gems/bundler-1.0.0/lib/bundler/runtime.rb   27   in `setup'
1  /home/bbahry/.gems/gems/bundler-1.0.0/lib/bundler/spec_set.rb  12  in `each'
2  /home/bbahry/.gems/gems/bundler-1.0.0/lib/bundler/spec_set.rb  12  in `each'
3  /home/bbahry/.gems/gems/bundler-1.0.0/lib/bundler/runtime.rb  17  in `setup'
4  /home/bbahry/.gems/gems/bundler-1.0.0/lib/bundler.rb  100  in `setup'
5  /home/bbahry/gseeds.brentbahry.com/releases/20100927012812/config/boot.rb  9  
6  /usr/lib/ruby/1.8/rubygems/custom_require.rb  31  in `gem_original_require'
7  /usr/lib/ruby/1.8/rubygems/custom_require.rb  31  in `require'
8  /home/bbahry/gseeds.brentbahry.com/releases/20100927012812/config/application.rb  1  
9  /usr/lib/ruby/1.8/rubygems/custom_require.rb  31  in `gem_original_require'
10  /usr/lib/ruby/1.8/rubygems/custom_require.rb  31  in `require'
11  /home/bbahry/gseeds.brentbahry.com/releases/20100927012812/config/environment.rb  7  
12  /usr/lib/ruby/1.8/rubygems/custom_require.rb  31  in `gem_original_require'
13  /usr/lib/ruby/1.8/rubygems/custom_require.rb  31  in `require'
14  config.ru  3  
15  /usr/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb  46  in `instance_eval'
16  /usr/lib/ruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb  46  in `initialize'
17  config.ru  1  in `new'
18  config.ru  1 

我想知道是否有人已经找到解决这个问题的办法?

需要注意的是,示例 rails 应用程序(即运行 rails new appName 并将其直接通过 ftp 传输到 DreamHost 上的生产服务器)可以正常运行。这让我很不安,因为我想象我的真实应用程序和示例应用程序都具有 rack (1.2.1) 依赖项;这对我来说意味着,为了绕过 DreamHost 服务器 gem,我以某种方式在真实应用程序中干扰了 rack 的实现。

我的示例 rails 应用程序在 DreamHost 上的单独子域上运行,同时我尝试部署的两个真实应用程序的子域都出现此错误。

另外,在采用供应商/缓存方法之前,我最初尝试在 DreamHost 用户目录中本地安装 gem。也许这不会影响任何事情。

感谢你耐心回答这个冗长的问题

答案1

DreamHost 不支持 Rails 3。从某种意义上说,他们没有更新运行 Rails 3 应用程序所需的一些 gem 版本,而且你实际上没有能力让你自己的 gem 取代 DreamHost 安装的 gem。

在这种情况下,我的测试应用程序没有使用任何冲突的 gem(仅显示默认的 index.html 页面),但是任何真正的应用程序都会这样做,这就是为什么我的其他 rails 3 应用程序都无法运行的原因。

(我提交了一张问题单,DreamHost 告诉我还需要一段时间才能支持 Rails 3。)

解决方案是使用 VPS(我推荐 Linode)或试用 Heroku。您有机会找到一个支持 rails 3 应用程序的优质共享主机 - 有机会。

VPS 保证完全控制,避免出现我使用 DreamHost 时遇到的情况。而 Heroku 让部署变得轻而易举,但如果他们不支持您的应用所需的 gem/服务,您以后可能会遇到问题。此外,就服务器资源而言,Heroku 的价格昂贵。我目前在 Linode 上运行。

相关内容