【问题标题】:carrierwave heroku - keep getting error msgcarrierwave heroku - 不断收到错误消息
【发布时间】:2013-10-03 03:17:51
【问题描述】:

我正在使用 rails 3.2.1、carrierwave 0.5.8、fog 1.1.2、rmagick 2.13.1。

我正在尝试将产品图片上传到 amazon s3 上,但无论我在网上找到的 carrierwave.rb 初始化文件的排列方式如何,我都会收到此错误消息(我想我已经尝试过所有这些) ,似乎没有一个工作。也没有任何内容上传到我的 S3 存储桶。对于我尝试过的其他版本,我得到了相同的错误消息。我认为这可能是我的控制器中的某些东西,但不确定是什么会绊倒它。请帮忙!

heroku 日志中的错误消息:

2012-03-05T06:35:18+00:00 app[web.1]:   app/controllers/products_controller.rb:40:in `update'
2012-03-05T06:35:18+00:00 app[web.1]: ArgumentError (Missing required arguments:   aws_access_key_id, aws_secret_access_key):
2012-03-05T06:35:18+00:00 app[web.1]: cache: [POST /products/3] invalidate, pass

载波初始化器

CarrierWave.configure do |config|
 if Rails.env.production?
  config.storage = :fog
  config.fog_credentials = {
  :provider              => 'AWS',
  :aws_access_key_id     => 'access_key',
  :aws_secret_access_key => 'secret_access_key',
  :region                => 'us-east-1'
  }


 config.fog_directory  = 'bucket_name'
 config.fog_public     = true                                   
 config.fog_attributes = {'Cache-Control' => 'max-age=315576000'}  

 else
  #for development and testing locally
  config.storage = :file
  config.enable_processing = false
 end
end

image_uploader

include CarrierWave::RMagick
  def store_dir
   "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb_pic do
   process :resize_to_limit => [170, 170]
  end
end

控制器

  def create
   @all_categories = get_all_categories
   checked_categories = get_categories_from(params[:categories])
   removed_categories = @all_categories - checked_categories
   @product = Product.new(params[:product])
   if @product.save
    checked_categories.each {|cat| @product.categories << cat if !@product.categories.include?(cat)}
    removed_categories.each {|cat| @product.categories.delete(cat) if @product.categories.include?(cat)}
    redirect_to(:action => 'list')
  else
   render "new"
  end
end

这是我在检查 heroku 配置时看到的

DATABASE_URL        => .....
GEM_PATH            => vendor/bundle/ruby/1.9.1
LANG                => en_US.UTF-8
PATH                => bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin
RACK_ENV            => production
RAILS_ENV           => production
S3_BUCKET           => bucket_name
S3_KEY              => access_key
S3_SECRET           => secret_access_key
SHARED_DATABASE_URL => .....

我已经在这上面花了两天的时间,什么也没做。

【问题讨论】:

    标签: ruby-on-rails heroku amazon-s3 carrierwave


    【解决方案1】:

    取出if Rails.env.production?。

    如果你做得对,你应该使用environment variables to store your credentials,并且在功能方面你也应该是matching your dev, test and productions environments(存储桶名称也应该是一个配置变量)

    【讨论】:

    • 我也试过了,还是不行。我犯了同样的错误。我什至在我的 config.ru 文件中添加了use Rack::Static, :urls =&gt; ['/uploads'], :root =&gt; 'tmp',并在我的上传文件中定义了 cache_dir,但没有任何效果。每次我仍然得到同样的错误
    【解决方案2】:

    我的代码有几个问题。我需要将 config.fog_public 更改为 false(根据亚马逊),并且从我的角度来看,雾宝石存在问题。显然它没有传递信息。我不得不通过这两行手动添加信息:

    compute = Fog::Compute.new(:provider =&gt; 'AWS', :aws_access_key_id =&gt; ACCESS_KEY_ID, :aws_secret_access_key =&gt; SECRET_ACCESS_KEY)

    和

    storage = Fog::Storage.new(:provider =&gt; 'AWS', :aws_access_key_id =&gt; ACCESS_KEY_ID, :aws_secret_access_key =&gt; SECRET_ACCESS_KEY)

    之后,一切正常。另外,请确保将其置于字符串格式,因为除非明确说明,否则 Rails 不会将任何以大写字母开头的内容识别为字符串。

    【讨论】:

    • 我在使用carrierwave、aws 和heroku 部署时遇到了类似的问题。作品在本地找到,但无法在部署时上传。您能否在上面编辑并添加您的 config/initializers/carrierwave.rb 文件的样子?这可能会让我的应用程序运行起来。
    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2016-08-21
    • 2019-08-20
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多