我正在使用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