我正在使用AWS Opsworks託管我的Rails應用程序(Ruby 2.0/Rails 3.2)。 對於資產編譯過程,我使用AssetSync在S3上自動上載編譯資產。我曾經將憑據存儲爲環境變量。使用AWS Opsworks設置環境變量
你有什麼想法,我該如何與廚師/ Opsworks做到這一點?
謝謝。
我正在使用AWS Opsworks託管我的Rails應用程序(Ruby 2.0/Rails 3.2)。 對於資產編譯過程,我使用AssetSync在S3上自動上載編譯資產。我曾經將憑據存儲爲環境變量。使用AWS Opsworks設置環境變量
你有什麼想法,我該如何與廚師/ Opsworks做到這一點?
謝謝。
這現在可以直接從AWS控制檯完成的,在應用配置,按照文件:http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment
我結束了使用https://github.com/joeyAghion/opsworks_custom_env。 它工作得很好。
它的工作原理!謝謝 – ipegasus
希望這存在Apache /乘客:( –
我使用了一個稍微不同的方法,使用OpsWorks掛鉤將JSON複製到application.yml。你可以在這裏閱讀更多關於它:http://zaman.io/how-to-import-aws-opsworks-json-into-rails-app/
您的鏈接thow 502錯誤:( – lacostenycoder
我知道這是一個較舊的帖子,但我張貼這個以防萬一這可以幫助別人。
我發現最簡單的方法實際上是使用廚師的部署掛鉤(http://docs.opscode.com/resource_deploy.html#deploy-phases)之一。
在Rails項目根目錄下添加一個名爲'deploy'的目錄。
在它添加一個名爲before_restart.rb文件,用代碼:
Chef::Log.info("Running deploy/before_restart.rb")
# map the environment_variables node to ENV
node[:deploy].each do |application, deploy|
deploy[:environment_variables].each do |key, value|
Chef::Log.info("Setting ENV[#{key}] to #{value}")
ENV[key] = value
end
end
當你觸發OpsWorks部署,你應該能夠看到ENV在Rails應用程序服務器實例日誌乏被設置。
這些變量將只在廚師過程中可用。不在我的應用程序中 – Erem
以上過程對我來說在我的主要Rails serers中工作正常。 但我剛剛在自己的堆棧中遇到同樣的問題,但這一次與Joey Aghion的delayed_job自定義配方 - 即使根據Chef日誌在部署時注入變量,延遲的作業腳本也不會被拾取 所以我要去嘗試application.yml或secrets.yml方法 – btsai
正如Erem所說的那樣,您將變量傳遞給Chef,但是您需要處理它以正確地將變量提供給Rails項目在這裏我解釋一下如何正確地做到這一點:https://medium.com/@dieg o_durante/opsworks-rails-and-environment-variables-30c6a143253c#.696grsgg9 –
環境變量之外的另一個選擇是您可以在部署時使用其中的變量生成一個文件。
例如,對於Rails應用程序,config/secrets.yml是放置這些的合理位置。我創建部署/ before_restart.rb具有以下內容部署掛鉤:
def create_secrets(secrets, release_path)
Chef::Log.info("Creating secrets")
file_path = ::File.join(release_path, 'config/secrets.yml')
::File.open(file_path, 'w') do |f|
f.write("production:\n")
secrets.each do |k,v|
f.write(" #{k}: #{v}\n")
end
end
end
node[:deploy].each do |application, deploy|
create_secrets(deploy[:secrets], release_path)
end
,然後在OpsWorks棧自定義JSON,你可以添加你的祕密:
"deploy": {
"super_cool_app": {
"secrets": {
"some_service_id": "foo",
"some_password": "bar"
}
}
您可以創建一個文件夾deploy
你的應用程序的根目錄,創建一個文件before_restart.rb
裏面,然後在你的文件中運行預編譯任務
run "cd /srv/www/myapp/current && /usr/local/bin/bundle exec rake assets:precompile"
該文件將在每個d運行eployment
來源:
我已經回答了這裏:AWS OpsWorks Environment variables not working
重要的是要明白,從OpsWorks儀表板我們可以將所有聲明的環境變量傳遞給Chef,那麼我們需要處理這些變量一個廚師的食譜,讓他們可以在Rails環境中使用。
這裏你可以找到你要找的東西:https://medium.com/@diego_durante/opsworks-rails-and-environment-variables-30c6a143253c#.696grsgg9
是的,但還不夠!您需要使用Chef處理它,將變量傳遞給Rails環境。在這裏我解釋瞭如何做到這一點:https://medium.com/@diego_durante/opsworks-rails-and-environment-variables-30c6a143253c#.696grsgg9 –
OP在問如何設置它們。處理它們是另一個主題。 – IanBussieres