我真的坚持这个,我试图在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
马丁
答案 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
中,效果很好。
希望对以后的人有所帮助!