阿里云如何使用figaro?
我是Ruby on Rails新手,我已经把项目部署到阿里云,网站的图片用aws s3当存储,在这过程中需要设置AWS的一些秘钥,我用了figaro。我的设置是这样的:
config/application.yml:
production:
SEND_CLOUD_USER_NAME: xxx
SEND_CLOUD_USER_KEY: xxxxx
secret_key_base: xxxxxxx
AWS_ACCESS_KEY_ID: xxxxxxxx
AWS_SECRET_ACCESS_KEY: hIMMHPxxxxxxx
AWS_REGION: ap-northeast-1
AWS_BUCKET_NAME: xxxxx
development:
SEND_CLOUD_USER_NAME: xxx
SEND_CLOUD_USER_KEY: xxxxx
secret_key_base: xxxxxxx
AWS_ACCESS_KEY_ID: xxxxxxxx
AWS_SECRET_ACCESS_KEY: hIMMHPxxxxxxx
AWS_REGION: ap-northeast-1
AWS_BUCKET_NAME: xxxxx
config/initializers/carrierwave.rb:
CarrierWave.configure do |config|
if Rails.env.production?
config.fog_provider = 'fog'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
region: ENV["AWS_REGION"]
}
config.fog_directory = ENV["AWS_BUCKET_NAME"]
else
config.storage :file
end
end
uploaders/house_image_uploader.rb:
if Rails.env.development?
storage :file
elsif Rails.env.production
storage :fog
end
然后执行cap production deploy
会报错,错误提示为:
00:22 deploy:assets:precompile
01 bundle exec rake assets:precompile
01 rake aborted!
01 ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
01 /home/deploy/homey/shared/bundle/ruby/2.4.0/gems/fog-core-1.45.0/lib/fog/core/service.rb:244:in `validate…
01 /home/deploy/homey/shared/bundle/ruby/2.4.0/gems/fog-core-1.45.0/lib/fog/core/service.rb:268:in `handle_s…
01 /home/deploy/homey/shared/bundle/ruby/2.4.0/gems/fog-core-1.45.0/lib/fog/core/service.rb:98:in `new'
01 /home/deploy/homey/shared/bundle/ruby/2.4.0/gems/fog-core-1.45.0/lib/fog/core/services_mixin.rb:16:in `ne…
01 /home/deploy/homey/shared/bundle/ruby/2.4.0/gems/fog-core-1.45.0/lib/fog/storage.rb:27:in `new'
...
...
提示说缺少aws_access_key_id,aws_secret_access_key,我从figaro github上看到有一个说法就是:
Other Hosts
If you're not deploying to Heroku, you have two options:
Generate a remote configuration file
Set ENV variables directly
Generating a remote configuration file is preferred because of:
familiarity – Management of config/application.yml is like that of config/database.yml.
isolation – Multiple applications on the same server will not produce configuration key collisions.
于是我登录远程主机,在/appname/shared/config下和/appname/current/config两个地方都创建了application.yml
,并且添加内容:
production:
SEND_CLOUD_USER_NAME: xxx
SEND_CLOUD_USER_KEY: xxxxx
secret_key_base: xxxxxxx
AWS_ACCESS_KEY_ID: xxxxxxxx
AWS_SECRET_ACCESS_KEY: hIMMHPxxxxxxx
AWS_REGION: ap-northeast-1
AWS_BUCKET_NAME: xxxxx
development:
SEND_CLOUD_USER_NAME: xxx
SEND_CLOUD_USER_KEY: xxxxx
secret_key_base: xxxxxxx
AWS_ACCESS_KEY_ID: xxxxxxxx
AWS_SECRET_ACCESS_KEY: hIMMHPxxxxxxx
AWS_REGION: ap-northeast-1
AWS_BUCKET_NAME: xxxxx
这样仍然报错,还是ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
,在Stack Overflow搜索过,也试了一些方法,但问题照旧,谁能帮我一下,这个问题怎么解决?感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
自己解决一下,在找相关资料的时候看到的:
And finally if we deploy application with Capistrano we have to deploy it properly. We should put local_env.yml to the Capistrano shared folder on the server and change config/deploy.rb like this:
于是我在自己的rails application中找到
config/deploy.rb
,里面有一行是:于是我试着把application.yml加到后面去,再次尝试部署成功。