【问题标题】:Rails ArgumentError (missing required :bucket option) fixes not working?Rails ArgumentError(缺少必需的 :bucket 选项)修复不起作用?
【发布时间】:2015-01-17 15:10:48
【问题描述】:

我的 Rails 应用程序托管在 Heroku 上,但我需要让 Paperclip 在本地工作,以便在测试中上传照片。我真的很接近,但我卡在“缺少必需的:bucket 选项”错误。

我尝试在我的环境文件中移动设置以及添加一个包含我的 AWS 凭证的 config/application.yml 文件,但没有骰子。

这是我在 development.rb 中的配置(在 production.rb 中看起来相同):

config.paperclip_defaults = {
        :storage => :s3,
        :s3_credentials => {
            :bucket => ENV['S3_BUCKET_NAME'],
            :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
            :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
            }
        }

我尝试将 :bucket 属性移到 :s3_credentials 之外,但它没有改变任何东西。 Application.yml 看起来像这样:

AWS_ACCESS_KEY_ID="xxxxxxxxxxxxxxxxx"
AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxxxxxx"
S3_BUCKET_NAME="xxxxxx"

我还安装了 dot-env gem 并将一个 s3.env 文件添加到我的应用程序的索引中,其中包含与上述相同的凭据,但即使这样也不起作用。也没有将我的 Paperclip 配置与我的模型中的 has_attached_file 内联。

我该怎么办??

【问题讨论】:

  • 文档建议我将该文件称为 .env,而不是 s3.env。 development.rb 加载时是否设置了环境变量?
  • 您能否更详细地解释一下您对 development.rb 中的环境变量的含义?
  • 实际上更改为 .env 有效!
  • 我推荐使用 figaro,它与 heroku github.com/laserlemon/figaro 配合得很好
  • 又一票投给费加罗。它将使用 application.yml。不需要 dot-env 和其他环境文件。

标签: ruby-on-rails ruby heroku amazon-web-services amazon-s3


【解决方案1】:

您的 Application.yml 文件看起来不像 YAML。它应该是这样的:

AWS_ACCESS_KEY_ID: "xxxxxxxxxxxxxxxxx"
AWS_SECRET_ACCESS_KEY: "xxxxxxxxxxxxxxxxxxxx"
S3_BUCKET_NAME: "xxxxxx"

如果您按照here 的建议加载 yml 文件,您会希望 yml 文件如下所示:

development:
  AWS_ACCESS_KEY_ID: "xxxxxxxxxxxxxxxxx"
  AWS_SECRET_ACCESS_KEY: "xxxxxxxxxxxxxxxxxxxx"
  S3_BUCKET_NAME: "xxxxxx"

您需要一种在开发环境中为应用设置环境变量的方法。使用 Application.yml 或 .env 文件应该可以工作,但您可能不需要两者。

【讨论】:

    【解决方案2】:

    或者,如果有人遇到此问题并且不想使用 .env 文件,则可以使用以下方法。

    假设您的存储桶托管在美国区域,请将名为 aws.yml 的文件放在配置目录下。该文件应采用以下格式:

    development:
     access_key_id: AWS_ACCESS_KEY_ID
     secret_access_key: AWS_SECRET_KEY_ID
    
    production:
     access_key_id: AWS_ACCESS_KEY_ID
     secret_access_key: AWS_SECRET_KEY_ID
    

    在您的模型中:

    class Model < ActiveRecord::Base
      has_attached_file :avatar, styles: {
       thumb: '100x100>',
       square: '200x200#',
       medium: '300x300>'}, :storage => :s3,
        :s3_credentials => "#{Rails.root}/config/aws.yml",
        :bucket => "your_bucket_name"
    
        validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
    

    将 your_bucket_name 替换为您的实际存储桶的名称。

    宝石文件:

    gem 'aws-sdk', '< 2.0'
    

    在环境、生产和开发下:

    config.paperclip_defaults = {
        :storage => :s3,
        :s3_credentials => {
            :bucket => ENV['S3_BUCKET_NAME'],
            :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
            :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
            }
        }
    

    要在 Heroku 上投入生产,您必须使用终端进行以下设置:

    $ heroku config:set S3_BUCKET_NAME=your_bucket_name
    $ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id
    $ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key
    

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2013-07-25
      • 2017-03-23
      相关资源
      最近更新 更多