我是Ruby on Rails新手,我已經(jīng)把項目部署到阿里云,網(wǎng)站的圖片用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
然后執(zhí)行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兩個地方都創(chuàng)建了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搜索過,也試了一些方法,但問題照舊,誰能幫我一下,這個問題怎么解決?感謝!
自己解決一下,在找相關資料的時候看到的:
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:
before 'deploy:assets:precompile', :symlink_config_files
desc "Link shared files"
task :symlink_config_files do
symlinks = {
"#{shared_path}/config/database.yml" => "#{release_path}/config/database.yml",
"#{shared_path}/config/local_env.yml" => "#{release_path}/config/local_env.yml"
}
run symlinks.map{|from, to| "ln -nfs #{from} #{to}"}.join(" && ")
end
于是我在自己的rails application中找到config/deploy.rb
,里面有一行是:
append :linked_files, "config/database.yml", "config/secrets.yml"
于是我試著把application.yml加到后面去,再次嘗試部署成功。
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術與教育服務機構,發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。