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

我的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'] } } 

我试过移动: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文件,则以下方法有效。

假设您的存储桶托管在美国地区,请在config dir下放置一个名为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 

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

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

如果你像他们在这里建议的那样加载yml文件,你会希望你的yml文件看起来像这样:

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

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