1

我有一个使用 Ruby 1.9.3 和 Rails 3.2.13 在 Mac OS X 上本地运行良好的 Rails 应用程序。这已经使用 Capistrano 部署到我的 Ubuntu 虚拟服务器(nginx / unicorn)并且运行良好。

当我用 RMagick 安装 CarrierWave gem 时,问题就来了。这些被添加到 gemfile 并且在本地运行良好,但是在部署到服务器时,我每次都会收到 500 错误。

服务器上 unicorn.log 的简短摘录:

E, [2013-06-28T12:04:05.937845 #2758] ERROR -- : reaped #<Process::Status: pid 23786 exit 1> worker=0
I, [2013-06-28T12:04:05.939517 #2758]  INFO -- : worker=0 spawning...
I, [2013-06-28T12:04:05.968225 #23793]  INFO -- : worker=0 spawned pid=23793
I, [2013-06-28T12:04:05.969959 #23793]  INFO -- : Refreshing Gem list
E, [2013-06-28T12:04:59.669504 #23793] ERROR -- : uninitialized constant CarrierWave (NameError)
/home/deployer/apps/panto/releases/20130628115346/app/uploaders/image_uploader.rb:3:in `<top (required)>'
/home/deployer/apps/panto/releases/20130628115346/app/models/picture.rb:4:in `<class:Picture>'
/home/deployer/apps/panto/releases/20130628115346/app/models/picture.rb:1:in `<top (required)>'

“未初始化的常量”错误中提到的文件是我的 CarrierWave 上传器类,由 CarrierWave 自己的生成器创建,它的开头是:

# encoding: utf-8

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
  include Sprockets::Helpers::RailsHelper
  include Sprockets::Helpers::IsolatedHelper

因此,该错误与主 CarrierWave 类的继承有关。

从 Gemfile 中提取:

gem 'jquery-rails'
gem 'simple_form'
gem 'country_select'
gem 'carrierwave'
gem 'rmagick'

并来自 Gemfile.lock:

carrierwave (0.8.0)
  activemodel (>= 3.2.0)
  activesupport (>= 3.2.0)
...
rmagick (2.13.2)

这些文件在我的 git 存储库和服务器上是相同的。这似乎足以让我在本地运行的应用程序找到 CarrierWave,但不适用于服务器版本。

Capistrano 运行 bundle:install 并在部署时重新启动服务器,但我也尝试过手动执行这两项操作而没有任何更改。

我在网上看到过一些类似的问题,但没有一个解决方案似乎与此相关——有人说它与 CarrierWave 无关,但没有说它与什么有关。

cap deploy:rollback有人可以在我再次给我任何指示吗?

谢谢。

最近更新:

我在服务器上启动并运行了该应用程序。虽然require 'carrierwave'在 application.rb 文件中不起作用,但以部署用户身份登录服务器,导航到应用程序目录,使用打开 rails 控制台RAILS_ENV=production bundle exec rails c然后键入require 'carrierwave'似乎已经使它起作用。

我还没有将其标记为已回答,因为我怀疑它可能会在下一次部署时再次停止,但它可能会缩小问题的范围。

4

1 回答 1

0

看起来这可能与宝石的需求顺序有关。有关上下文,请参阅此 stackoverflow 问题。有些人似乎通过 application.rb 中的明确要求来解决它(像这样),但希望将 Gemfile 中的顺序更改为:

gem 'rmagick'
gem 'carrierwave'

应该修复它。

也可能有助于确保 RMagick 在您的服务器上正确安装。

于 2013-06-28T12:53:30.593 回答