【问题标题】:ArgumentError: missing required :bucket optionArgumentError:缺少必需的:bucket 选项
【发布时间】:2016-09-30 02:17:59
【问题描述】:

我设置了所有环境变量。我使用heroku config 检查了它,但我仍然无法在开发环境中使用回形针 gem 和 aws s3 保存图像并收到ArgumentError: missing required :bucket option 错误。我什至尝试将AWS_BUCKET 更改为S3_BUCKET_NAME,但仍然没有成功。我已经解决了每一个堆栈溢出问题,我什至可以找到与该主题相关的远程问题,但仍然找不到解决方案。

宝石

gem 'paperclip'
gem 'aws-sdk-v1'
gem 'aws-sdk', '> 2'

型号

  has_attached_file :banner_image,
                :storage => :s3,
                :url =>':s3_domain_url',
                :path => '/:class/:attachment/:id_partition/:style/:filename',
                styles:
                    {
                        large: '600x600>',
                        medium: '300x300>',
                        thumb: '100x100>'
                    },
                default_url: '/images/:style/missing.png',
                :s3_credentials => Proc.new{|a| a.instance.s3_credentials }

  def s3_credentials
    {:bucket => Rails.application.secrets.aws_bucket, :access_key_id => Rails.application.secrets.aws_access_key_id, :secret_access_key => Rails.application.secrets.aws_secret_access_key}
  end

  validates_attachment_content_type :banner_image, content_type: /\Aimage\/.*\Z/

development.rb

  config.paperclip_defaults = {
    :storage => :s3,
    :s3_protocol => 'https',
    :s3_region => Rails.application.secrets.aws_region,
    :s3_credentials => {
      :bucket => Rails.application.secrets.aws_bucket,
      :access_key_id => Rails.application.secrets.aws_access_key_id,
      :secret_access_key => Rails.application.secrets.aws_secret_access_key
    }
  }

secrets.rb

development:
  admin_name: <%= ENV["ADMIN_NAME"] %>
  admin_email: <%= ENV["ADMIN_EMAIL"] %>
  admin_password: <%= ENV["ADMIN_PASSWORD"] %>
  email_provider_username: <%= ENV["SENDGRID_USERNAME"] %>
  email_provider_password: <%= ENV["SENDGRID_PASSWORD"] %>
  domain_name: <%= ENV["DOMAIN_NAME"] %>
  aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
  aws_bucket: <%= ENV["AWS_BUCKET"] %>
  aws_region: <%= ENV["AWS_REGION"] %>
  secret_key_base: hchwhc987h23y4bf93h4f928374h9f78h329487hf98723h4f789h234987hf89723h4f897h23498fh723487hf823974hf9872h34f7823489f

test:
  domain_name: example.com
  secret_key_base: hd78h2399d0a6315b087b3bebd35uhfhf8u3h4fh348fh92837h4f987h234f897h23487fh23897h4f98732h4f987h23498f7h324987fh239748f8237h4f987h3947hf

development_heroku:
  admin_name: <%= ENV["ADMIN_NAME"] %>
  admin_email: <%= ENV["ADMIN_EMAIL"] %>
  admin_password: <%= ENV["ADMIN_PASSWORD"] %>
  email_provider_username: <%= ENV["SENDGRID_USERNAME"] %>
  email_provider_password: <%= ENV["SENDGRID_PASSWORD"] %>
  domain_name: <%= ENV["DOMAIN_NAME"] %>
  aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
  aws_bucket: <%= ENV["AWS_BUCKET"] %>
  aws_region: <%= ENV["AWS_REGION"] %>
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

staging:
  admin_name: <%= ENV["ADMIN_NAME"] %>
  admin_email: <%= ENV["ADMIN_EMAIL"] %>
  admin_password: <%= ENV["ADMIN_PASSWORD"] %>
  email_provider_username: <%= ENV["SENDGRID_USERNAME"] %>
  email_provider_password: <%= ENV["SENDGRID_PASSWORD"] %>
  domain_name: <%= ENV["DOMAIN_NAME"] %>
  aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
  aws_bucket: <%= ENV["AWS_BUCKET"] %>
  aws_region: <%= ENV["AWS_REGION"] %>
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  admin_name: <%= ENV["ADMIN_NAME"] %>
  admin_email: <%= ENV["ADMIN_EMAIL"] %>
  admin_password: <%= ENV["ADMIN_PASSWORD"] %>
  email_provider_username: <%= ENV["SENDGRID_USERNAME"] %>
  email_provider_password: <%= ENV["SENDGRID_PASSWORD"] %>
  domain_name: <%= ENV["DOMAIN_NAME"] %>
  aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
  aws_bucket: <%= ENV["AWS_BUCKET"] %>
  aws_region: <%= ENV["AWS_REGION"] %>
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

【问题讨论】:

  • 将所有这些 ENV 密钥添加到 secrets.yml 似乎有很多重复。它还引入了错误和间接来源,因为您不应该将 secrets.yml 检入 git。我会直接从您的初始化程序中使用ENV.fetch("SOME_KEY")

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


【解决方案1】:

好吧,你有没有想过将环境变量添加到你的~/.bash_profile

export AWS_ACCESS_KEY_ID="KJAHSDH9HD0SAD89H"
export AWS_BUCKET="staging_value"
export AWS_SECRET_ACCESS_KEY="HASDF78H/JHIUDHSHHS8DH7USD7CH"

• 然后运行source .bash_profile

• 重启终端

这解决了我的问题。

【讨论】:

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