Ruby on rails Don';我没有';雾';使用carrierwave和unicorn在生产中安装gem

Ruby on rails Don';我没有';雾';使用carrierwave和unicorn在生产中安装gem,ruby-on-rails,carrierwave,unicorn,fog,Ruby On Rails,Carrierwave,Unicorn,Fog,我正在尝试将Fog与Carrierwave一起使用,并在Unicorn日志中得到此错误。我的GEM文件中有雾,我的NodeImageUploader调用 storage :fog Gemfile source 'http://rubygems.org' gem 'rails', '3.2.8' gem 'bcrypt-ruby', '3.0.1' gem 'jquery-rails' gem 'fog', '1.8.0' gem 'bootstrap-sass', '~> 2.2.1.

我正在尝试将Fog与Carrierwave一起使用,并在Unicorn日志中得到此错误。我的GEM文件中有雾,我的NodeImageUploader调用

storage :fog
Gemfile

source 'http://rubygems.org'

gem 'rails', '3.2.8'
gem 'bcrypt-ruby', '3.0.1'
gem 'jquery-rails'
gem 'fog', '1.8.0'
gem 'bootstrap-sass', '~> 2.2.1.1'
gem 'devise'
gem 'omniauth-facebook'
gem 'rails-backbone'
gem 'simple_form'
# gem 'newrelic_rpm'
# gem 'client_side_validations'
gem 'inherited_resources'
gem 'friendly_id', '~> 4.0.1'
gem 'carrierwave'
gem 'activeadmin'
gem 'meta_search', '>= 1.1.0.pre'
gem 'will_paginate'
gem 'bootstrap-will_paginate'
gem 'faker', '1.0.1'
gem 'rack-contrib'
gem 'soulmate', :git => "git://github.com/allotrop/soulmate.git", :require => 'soulmate/server'
gem 'httparty'
gem 'mini_magick'
gem 'mime-types'
gem 'redis'
gem 'pg', '0.12.2'
gem 'nokogiri', '1.5.5'
# gem "rmagick"

group :development, :test  do 
  gem 'rspec-rails', '2.11.0'
  gem 'guard-rspec', '0.5.5'
end

group :development do
  gem 'annotate', ">=2.5.0"
  #gem 'open-uri'
end

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  # gem 'therubyracer', :platform => :ruby
  gem 'uglifier', '>= 1.0.3'
end

group :test do
  gem 'capybara', '1.1.2'
  gem 'guard-spork', '0.3.2'
  gem 'spork', '0.9.0'
  gem 'factory_girl_rails', '1.4.0'
  gem 'rb-inotify', '0.8.8'
  gem 'libnotify', '0.5.9'
  gem 'database_cleaner', '0.7.0'
  gem 'email_spec'
end

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
gem 'unicorn'

# Deploy with Capistrano
gem 'capistrano'

# To use debugger
 gem 'debugger', group: [:development, :test]
# gem 'rubber'
# gem 'open4'
config/carrierwave.rb

CarrierWave.configure do |config|
config.fog_credentials = {

 :aws_access_key_id => 'xxxx'
 :aws_secret_access_key => 'yyyy'
 :provider => 'AWS'
}
config.fog_directory = 'example-uploads'
config.fog_public = true
end
restart|reload)
  sig USR2 && echo reloaded OK && exit 0
  echo >&2 "Couldn't reload, starting '$CMD' instead"
  run "$CMD"
  ;;
bundle show fog
让我
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/fog-1.3.1

此外,我能够在生产中的rake任务中使用Carrierwave的
remote_image_url
方法成功地将图像保存到S3。但是,当我尝试获取我的应用程序的任何页面时,都会出现此错误

unicorn.log

 E, [2012-12-11T20:49:28.872957 #23518] ERROR -- : You don't have the 'fog' gem installed (RuntimeError)
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/carrierwave-0.7.1/lib/carrierwave/uploader/configuration.rb:73:in `eval'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/carrierwave-0.7.1/lib/carrierwave/storage/fog.rb:3:in `<top (required)>'
 (eval):1:in `storage'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/carrierwave-0.7.1/lib/carrierwave/uploader/configuration.rb:73:in `eval'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/carrierwave-0.7.1/lib/carrierwave/uploader/configuration.rb:73:in `storage'
/home/deployer/apps/allotrop/releases/20121211204621/app/uploaders/node_image_uploader.rb:24:in `<class:NodeImageUploader>'
/home/deployer/apps/allotrop/releases/20121211204621/app/uploaders/node_image_uploader.rb:5:in `<top (required)>'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `require'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `block in requi>
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:236:in `load_dependenc>
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `require'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:359:in `require_or_loa>
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:502:in `load_mis
E[2012-12-11T20:49:28.872957#23518]错误--:您没有安装'fog'gem(运行时错误)
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/carrierwave-0.7.1/lib/carrierwave/uploader/configuration.rb:73:in'eval'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/carrierwave-0.7.1/lib/carrierwave/storage/fog.rb:3:in`'
(评估):1:在“存储”中
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/carrierwave-0.7.1/lib/carrierwave/uploader/configuration.rb:73:in'eval'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/carrierwave-0.7.1/lib/carrierwave/uploader/configuration.rb:73:in'storage'
/home/deployer/apps/allotrop/releases/20121211204621/app/uploaders/node\u image\u uploader.rb:24:in`'
/home/deployer/apps/allotrop/releases/20121211204621/app/uploaders/node\u image\u uploader.rb:5:in`'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active\u support/dependencies.rb:251:in'require'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active\u support/dependencies.rb:251:in`block in requi>
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active\u support/dependencies.rb:236:in`load\u dependenc>
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active\u support/dependencies.rb:251:in'require'
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active\u-support/dependencies.rb:359:in`require\u或\u-loa>
/home/deployer/apps/allotrop/shared/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active\u support/dependencies.rb:502:in'load\u mis

如果我将上传程序切换到
storage:file
,甚至在开发中使用
storage:fog
时,应用程序也可以正常工作。我哪里出了问题?

在一天中的大部分时间里,我都在尝试解决这个问题,然后按照中的步骤进行修复。他提到的更改是在您的unicorn模板中添加
预加载应用程序
,并使用USR2信号重新启动unicorn

unicorn.rb.erb

# Load rails+github.git into the master before forking workers
# for super-fast worker spawn times
preload_app true

before_fork do |server, worker|

  # Disconnect since the database connection will not carry over
  if defined? ActiveRecord::Base
    ActiveRecord::Base.connection.disconnect!
  end

  ##
  # When sent a USR2, Unicorn will suffix its pidfile with .oldbin and
  # immediately start loading up a new version of itself (loaded with a new
  # version of our app). When this new Unicorn is completely loaded
  # it will begin spawning workers. The first worker spawned will check to
  # see if an .oldbin pidfile exists. If so, this means we've just booted up
  # a new Unicorn and need to tell the old one that it can now die. To do so
  # we send it a QUIT.
  #
  # Using this method we get 0 downtime deploys.

  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exists?(old_pid) && server.pid != old_pid
    begin
      Process.kill("QUIT", File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
      # someone else did our job for us
    end
  end
end

after_fork do |server, worker|
  ##
  # Unicorn master loads the app then forks off workers - because of the way
  # Unix forking works, we need to make sure we aren't using any of the parent's
  # sockets, e.g. db connection
  # Start up the database connection again in the worker

  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
  end

  # Redis and Memcached would go here but their connections are established
  # on demand, so the master never opens a socket
end
unicorn_init.erb

CarrierWave.configure do |config|
config.fog_credentials = {

 :aws_access_key_id => 'xxxx'
 :aws_secret_access_key => 'yyyy'
 :provider => 'AWS'
}
config.fog_directory = 'example-uploads'
config.fog_public = true
end
restart|reload)
  sig USR2 && echo reloaded OK && exit 0
  echo >&2 "Couldn't reload, starting '$CMD' instead"
  run "$CMD"
  ;;

然后需要运行
cap:unicorn:setup unicorn:stop unicorn:start
。如果有人面临这一问题,我强烈建议看到铁路上的乘客

您可以共享您的Gemfile吗?对于unicorn,有时您需要重新启动它以刷新您的Gemfile。你试过(或者你会试一下)吗?我重新开始了,但仍然有相同的错误。我使用的capistrano配方确实会重新启动unicorn。请尝试使用
capistrano unicorn
gem(),而不是维护您自己的cap任务。