首页 文章

Rails ArgumentError(缺少必需:bucket选项)修复不起作用?

提问于
浏览
0

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

我已尝试在我的环境文件中移动设置,以及添加带有我的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']
            }
        }

我试过移动:在s3_credentials之外的bucket属性,但它没有改变任何东西 . 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一起添加 .

我该怎么办??

2 回答

  • 1

    或者,如果有人遇到此问题并且不想使用.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替换为实际存储桶的名称 .

    的Gemfile:

    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
    
  • 0

    您的 Application.yml 文件看起来不像YAML . 它应该如下所示:

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

    如果您正在加载yml文件,就像他们建议here一样,您希望您的yml文件如下所示:

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

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

相关问题