2013-10-19 112 views
2

我正在使用AWS Opsworks託管我的Rails應用程序(Ruby 2.0/Rails 3.2)。 對於資產編譯過程,我使用AssetSync在S3上自動上載編譯資產。我曾經將憑據存儲爲環境變量。使用AWS Opsworks設置環境變量

你有什麼想法,我該如何與廚師/ Opsworks做到這一點?

謝謝。

回答

1

這現在可以直接從AWS控制檯完成的,在應用配置,按照文件:http://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment

+0

是的,但還不夠!您需要使用Chef處理它,將變量傳遞給Rails環境。在這裏我解釋瞭如何做到這一點:https://medium.com/@diego_durante/opsworks-rails-and-environment-variables-30c6a143253c#.696grsgg9 –

+0

OP在問如何設置它們。處理它們是另一個主題。 – IanBussieres

6

我知道這是一個較舊的帖子,但我張貼這個以防萬一這可以幫助別人。

我發現最簡單的方法實際上是使用廚師的部署掛鉤(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應用程序服務器實例日誌乏被設置。

+1

這些變量將只在廚師過程中可用。不在我的應用程序中 – Erem

+0

以上過程對我來說在我的主要Rails serers中工作正常。 但我剛剛在自己的堆棧中遇到同樣的問題,但這一次與Joey Aghion的delayed_job自定義配方 - 即使根據Chef日誌在部署時注入變量,延遲的作業腳本也不會被拾取 所以我要去嘗試application.yml或secrets.yml方法 – btsai

+0

正如Erem所說的那樣,您將變量傳遞給Chef,但是您需要處理它以正確地將變量提供給Rails項目在這裏我解釋一下如何正確地做到這一點:https://medium.com/@dieg o_durante/opsworks-rails-and-environment-variables-30c6a143253c#.696grsgg9 –

2

環境變量之外的另一個選擇是您可以在部署時使用其中的變量生成一個文件。

例如,對於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" 
     } 
    } 
2

您可以創建一個文件夾deploy你的應用程序的根目錄,創建一個文件before_restart.rb裏面,然後在你的文件中運行預編譯任務

run "cd /srv/www/myapp/current && /usr/local/bin/bundle exec rake assets:precompile" 

該文件將在每個d運行eployment

來源:

https://www.youtube.com/watch?v=nHu8fCp9GR4&list=WL&index=7