2

我正在使用 AWS Opsworks 托管我的 Rails 应用程序(Ruby 2.0/Rails 3.2)。对于资产编译过程,我使用 AssetSync 在 S3 上自动上传编译好的资产。我曾经将凭据存储为环境变量。

您知道如何使用 Chef/Opsworks 做到这一点吗?

谢谢。

4

7 回答 7

7

我知道这是一个较旧的帖子,但我发布这个以防万一这对其他人有帮助。

我发现实际上最简单的方法是使用 Chef 的部署钩子之一(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 部署时,您应该能够看到在 Rails 应用服务器实例日志中设置的 ENV 变量。

于 2014-02-22T23:53:31.097 回答
4

我最终使用了https://github.com/joeyAghion/opsworks_custom_env。它工作得很好。

于 2013-10-19T16:31:24.710 回答
2

我使用了一种稍微不同的方法,使用 OpsWorks 挂钩将 JSON 复制到 application.yml。你可以在这里阅读更多关于它的信息:http: //zaman.io/how-to-import-aws-opsworks-json-into-rails-app/

于 2014-02-10T13:15:06.217 回答
2

环境变量之外的另一个选项是您可以在部署时生成一个包含变量的文件。

例如,对于 Rails 应用程序,config/secrets.yml 是放置这些的合理位置。我创建了一个具有以下内容的 deploy/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"
      }
    }
于 2014-05-01T18:56:36.067 回答
2

您可以deploy在应用程序的根目录中创建一个文件夹,在其中创建一个文件before_restart.rb,然后在您的文件中运行预编译任务

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

该文件将在每个部署上运行

来源:

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

于 2014-06-05T16:53:25.143 回答
1

现在可以根据文档在应用程序配置上直接从 AWS 控制台完成:http: //docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html#workingapps-creating-environment

于 2014-08-21T23:39:47.303 回答
0

我已经在这里回答了:AWS OpsWorks Environment variables not working

重要的是要了解,从 OpsWorks 仪表板中,我们可以将所有声明的环境变量传递给 Chef,然后我们需要使用 Chef 配方处理这些变量,以使它们可用于 Rails 环境。

在这里您可以找到您要查找的内容:https ://medium.com/@diego_durante/opsworks-rails-and-environment-variables-30c6a143253c#.696grsgg9

于 2016-10-26T09:35:24.763 回答