Escalabilidade de usar variáveis de ambiente

5

Eu acabei de me mudar para o mundo Ruby on Rails e, com isso, estou sendo introduzido a um uso muito mais liberal de variáveis de ambiente do que o que eu fui exposto no passado. Especificamente, parece que há uma convenção aceita para armazenar chaves de API de terceiros e tokens secretos como variáveis de ambiente.

NOTA: esta não é uma questão específica do RoR. Eu só mencionei isso para ilustrar um ponto de vista.

Eu certamente vejo o benefício dessa abordagem; a maior delas é que uma base de código pode ser implantada de forma idêntica em vários servidores sem alterar o código ou temer que o aplicativo esteja usando o recurso errado. No entanto, tenho medo de pular no vagão da banda.

Primeiro, a abordagem não parece escalonável em minha estação de trabalho de desenvolvimento (laptop) ou em servidores. Se estou trabalhando em 10 sites diferentes e cada um deles está usando o Amazon S3 (por exemplo), preciso de 10 EVs diferentes. A gestão será difícil:

  • colisões de nomenclatura são uma possibilidade distinta (especialmente se eu estou trabalhando em projetos legados que eu não tenho controle completo);
  • a visibilidade é obscura (quais EVs existem na máquina de destino? que foram ou podem ser desativados?);
  • sem controle de versão (quem alterou o EV? quando? porque?)
Em segundo lugar, um dos principais pontos de venda, como eu o entendo, é que usar EVs retira os dados confidenciais do repositório, onde olhos curiosos podem vê-los. Isso só parece que deve ser um problema para repositórios públicos, que eu não tenho nenhum. Todos os meus repositórios são privados, muitas vezes devido a problemas contratuais, como NDA ou direitos de propriedade.

Como tudo isso acontece em cenários da vida real? Esta abordagem é melhor para algumas situações do que para outras? Existem outros profissionais que superam minhas preocupações aqui?

    
por Jeff 05.10.2013 / 18:49
fonte

2 respostas

3

Variáveis de ambiente são um conjunto de pares de chave / valor para configurar ... o ambiente (ou seja, coisas que pertencem diretamente ao sistema operacional, como locais de pastas compartilhadas, por exemplo).

Como uma ferramenta de configuração de aplicativos, nunca fui um grande fã de variáveis de ambiente ou configurações de registro, preferindo arquivos de configuração pelas mesmas razões que você já declarou.

Os arquivos de configuração fornecem:

  1. Controle completo do formato usado para armazenar as configurações
  2. A capacidade de armazenar objetos, com a ajuda da serialização
  3. A capacidade de armazenar estruturas complexas, como árvores, etc.
por 05.10.2013 / 19:32
fonte
2

As variáveis de ambiente devem ser armazenadas no controle de versão e gerenciadas com um sistema. fantoche, chef, etc são todos projetados para lidar com isso e evitar muitos dos problemas que você mencionou.

    
por 05.10.2013 / 19:46
fonte