为什么生产轨道会忽略捆绑器安装的宝石?

时间:2012-06-28 14:43:47

标签: ruby-on-rails-3 apache2 passenger

我正在使用capistrano将rails应用程序部署到生产环境中。一切似乎都有效,capistrano不报告任何错误,但应用程序无法启动以下错误消息

Ruby (Rack) application could not be started 
Could not find activemodel-3.2.0 in any of the sources (Bundler::GemNotFound)

在检查捆绑的宝石时,正确版本的宝石位于共享文件夹中,但乘客似乎没有使用它们。 cap部署的汇总输出如下

  * executing "cd /opt/geonovo/retail/releases/20120628125205 && \
    bundle install --gemfile /opt/geonovo/retail/releases/20120628125205/Gemfile \
    --path /opt/geonovo/retail/shared/bundle --deployment \
    --without development test"
    servers: ["rt-devrails01"]
    [rt-devrails01] executing command
 ** [out :: rt-devrails01] Fetching source index for http://rubygems.org/
 ** [out :: rt-devrails01] Using activesupport (3.2.0)
 ** [out :: rt-devrails01] 
 ** [out :: rt-devrails01] Using builder (3.0.0)
 ** [out :: rt-devrails01] 
 ** [out :: rt-devrails01] Installing activemodel (3.2.0)
 ...
 ...
 * [out :: rt-devrails01] 
 ** [out :: rt-devrails01] Your bundle is complete! 
 It was installed into /opt/geonovo/retail/shared/bundle
 command finished in 47529ms

在生产服务器上运行gem list并不显示activemodel 3.2.0 gem存在但共享目录/opt/geonovo/retail/shared/bundle/ruby/1.9.1/gems/确实包含activemodel-3.2.0的条目。

生产服务器/ bundle / config文件包含以下内容

--- 
BUNDLE_FROZEN: "1"
BUNDLE_PATH: /opt/geonovo/retail/shared/bundle
BUNDLE_DISABLE_SHARED_GEMS: "1"
BUNDLE_WITHOUT: development:test

在生产服务器上运行bundle check会显示以下内容

The following gems are missing
 * activemodel (3.2.0)
 * actionpack (3.2.0)
 * actionmailer (3.2.0)
 * activerecord (3.2.0)
 * activeresource (3.2.0)
 * railties (3.2.0)
 * rails (3.2.0)
Install missing gems with `bundle install`

我可以使用bundle install安装宝石,但我希望在可能的情况下在capistrano中进行部署。

Gemfile的开头包括以下行

source 'http://rubygems.org'

gem 'rails', '>= 3.2.0'

1 个答案:

答案 0 :(得分:0)

似乎问题是我的宝石版本已经过时了。 Bundler工作正常但由于加载宝石的问题,应用程序无法启动。

当检查/var/log/httpd/error_log时,问题变得明显,其中发现了许多错误,如下所示: -

WARNING:  #<ArgumentError: Illformed requirement 
  ["<Syck::DefaultKey:0x00000016a73648> 3.2.0"]>
WARNING:  Invalid .gemspec format in '...bundle/ruby/1.9.1/specifications/rails-3.2.0.gemspec'

这使我得到了以下question以及使用sudo gem update --system将gem更新为当前版本然后重新启动apache的解决方案。 (重新启动乘客似乎不够。