我正在使用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'
答案 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的解决方案。 (重新启动乘客似乎不够。