fog缺少必需的参数:aws_access_key_id

时间:2016-08-08 16:01:28

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我真的坚持这个,我试图在StackOverflow上找到答案,但没有什么真的有用,我希望有人可以给我一些建议。 在添加AWS参数之前,一切都在本地工作正常,并且当我不在配置文件上上传图片时仍然可以正常工作。

主要问题>>

Devise中的ArgumentError :: RegistrationsController #update
缺少必需的参数:aws_access_key_id

这是user.rb :(也许我的存储空间错误或凭据,或者我可能不会使用所有Aws_key_ID启动文件)

    class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_attached_file :avatar,
    :styles => {
      :medium => "300x300>",
      :thumb => "100x100#"
      },
    :default_url => "/images/:style/missing.png",
    :url  => ":s3_domain_url",
    :path => "public/avatars/:id/:style_:basename.:extension",
    :storage => :fog,
    #Configuration for Amazon S3
    :fog_credentials => {
        provider: 'AWS',
        region: 'Frankfurt',
        aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
        aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"]
    },
        fog_directory: ENV["FOG_DIRECTORY"]

    validates_attachment_content_type :avatar, :content_type => /\Aimage\/.*\Z/
end

GemFile:

gem 'paperclip', '~> 4.1'
gem 'devise'
gem 'aws-sdk'
gem 'fog'
gem 'figaro'

application.yml

SECRET_KEY_BASE: 'XXXXXxxxxxxxxxxxxxxxxxxxxxxx'
AWS_ACCESS_KEY_ID: 'xxxxxxxxxQ'
AWS_SECRET_ACCESS_KEY: 'yxxxxxxx'
EMAIL_LOGIN: 'xxx@gmail.com'
EMAIL_PASSWORD: 'xxxxxx'
development:
  FOG_DIRECTORY: demo-dev
production:
  FOG_DIRECTORY: demo-production

secret.yml

development:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

test:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

我应该在production.rb文件中添加一些内容吗?

希望你能找到一些建议来帮助我:D

马丁

2 个答案:

答案 0 :(得分:1)

嗨,你在加载fog_credentials时没有正确配置,所以它会是:

config = YAML::load_file('config/application.yml')
...
:fog_credentials => {
  provider: 'AWS',
  region: 'Frankfurt',
  aws_access_key_id: config["AWS_ACCESS_KEY_ID"],
  aws_secret_access_key: config["AWS_SECRET_ACCESS_KEY"]
}
...

因为您没有为它设置任何env变量,但是您已经在application.yml中定义了它,所以只需加载它们

答案 1 :(得分:0)

尽管该线程很旧,但我最近在一个旧项目中遇到了同样的问题,并且发现在config/application.yml上设置的ENV在加载时在CarrierWave初始化程序中不可用由于某种原因,我无法解释。

然后我替换了像这样的变量:

# config/initializers/carrierwave.rb

aws_access_key_id: config["AWS_ACCESS_KEY_ID"],
aws_secret_access_key: config["AWS_SECRET_ACCESS_KEY"]

使用

aws_access_key_id: Rails.application.secrets.aws_access_key_id
aws_secret_access_key: Rails.application.secrets.aws_secret_access_key

并将它们添加到config/secrets.yml中,效果很好。

希望对以后的人有所帮助!