OpsWorks é um software impressionante, mas às vezes não tem a zona de conforto que nós, desenvolvedores, amamos tanto.
Um recurso que realmente sinto falta é a capacidade de configurar meu aplicativo usando variáveis ENV.
Não conheço nenhuma maneira fácil (ou seja, como o Heroku) de criar variáveis de ambiente no OpsWorks que o aplicativo possa consumir.
Felizmente, OpsWorks é baseado no Chef e pode ser personalizado da maneira que você quiser.
Esteja avisado, nem sempre é um caminho fácil, é necessário conhecimento básico do Chef, a interface é bastante complicada, mas no final dá conta do recado.
Então, estávamos dizendo meio ambiente !
Sabemos que o ambiente não é compatível com OpsWorks, então o que realmente precisamos é simulá-lo de alguma forma.
Uma solução comum entre desenvolvedores Rails, é a gem Dotenv que carrega o arquivo .env
na raiz do seu aplicativo e cria as chaves correspondentes no ENV
objeto.
Vou assumir que você já criou um Stack no OpsWorks com uma camada de aplicativo Rails.
Lado dos trilhos
Adicione a gema Dotenv ao seu Gemfile
gem 'dotenv-rails'
executar pacote
$ bundle
o mais rápido possível, carregue o ambiente através do Dotenv
# application.rb
require File.expand_path('../boot', __FILE__)
require 'dotenv'
Dotenv.load
envie o novo código para o Github
OpsWorks side
No painel Stack, clique em stack settings
, selecione sim para , escolha Git como tipo de repositório e insira como a URL do repositório. Se você quiser usar um repositório privado, também precisará inserir a chave privada SSH. Escolha o seu branch ( neste caso) e adicione o seguinte JSON na caixa Use custom Chef cookbooks
https://github.com/mikamai/opsworks-dotenv
master
Custom JSON
{
"deploy":{
"your_app_name":{
"symlink_before_migrate":{
".env" : ".env"
},
"app_env": {
"YOUR_ENV_KEY": "KEY_VALUE",
"ANOTHER_ENV_KEY": "SECOND_VALUE"
}
}
}
}
Não se esqueça da symlink_before_migrate
chave, ela diz ao Chef para vincular o arquivo criado na pasta de implantação compartilhada à pasta de implantação atual, para que o aplicativo Rails possa pegá-lo. Para recuperar o valor, vá para a página Aplicativos no console da AWS, clique no nome do aplicativo que deseja configurar e, a partir daí, copie a propriedade do aplicativo. .env
your_app_name
short name
A última etapa é instruir o Chef a executar sua receita em cada implantação.
Clique no link de receitas na seção da camada Rails
Adicione a receita personalizada e clique no ícone de adição (o nome da receita é exato rails::dotenv
)
Deve ser assim
Clique em salvar no canto inferior direito e atualize seus livros de receitas personalizados clicando em Stack
e, em seguida, Run command
Esta etapa deve ser realizada sempre que uma receita no livro de receitas personalizado for adicionada ou atualizada.
Agora você pode implantar seu aplicativo e desfrutar de seu novo ENV.
TL; DR : adicione a Dotenv
gema, clone https://github.com/mikamai/opsworks-dotenv
, adicione-a como Livro de receitas do Chef personalizado,
execute a rails::dotenv
receita em cada implantação, seja feliz!