1

我正在使用 capistrano 将 Rails 应用程序部署到生产环境。一切似乎都正常,capistrano 没有报告任何错误,但是应用程序无法启动并出现以下错误消息

Ruby (Rack) 应用程序无法启动
在任何源中都找不到 activemodel-3.2.0 (Bundler::GemNotFound)

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

  * 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:开发:测试

在生产服务器上运行bundle check显示如下

缺少以下宝石
 *活动模型(3.2.0)
 *动作包(3.2.0)
 * actionmailer (3.2.0)
 *活动记录(3.2.0)
 *活动资源(3.2.0)
 *铁路(3.2.0)
 * 导轨 (3.2.0)
使用 `bundle install` 安装缺失的 gem

我可能可以使用安装 gem,bundle install但如果可能的话,我希望在 capistrano 内进行部署。

Gemfile 的开头包括以下几行

来源“http://rubygems.org”

宝石'导轨','> = 3.2.0'

4

1 回答 1

0

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

当检查/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'

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

于 2012-07-05T10:28:03.630 回答