Eu queria saber como adicionar variáveis de configuração personalizadas a um aplicativo rails e como acessá-las no controlador, por exemplo, eu quero definir um diretório de upload nos arquivos de configuração, como development.rb e acessá-lo em um dos meus controladores.
Em segundo lugar, eu estava planejando ter suporte ao S3 para uploads no meu aplicativo, se eu quisesse adicionar um arquivo yaml com o acesso s3, chave secreta, como inicializá-lo no meu aplicativo Rails e como acesso os valores que defini nesse arquivo de configuração.
Respostas:
Atualização 1
Muito recomendado: hoje em dia, uso a gema Rails Config para obter o controle refinado que ela fornece.
Update2
Se você deseja uma solução rápida, verifique a resposta de Jack Pratt abaixo.
Embora minha resposta original abaixo ainda funcione, esta resposta está desatualizada. Eu recomendo olhar para as atualizações 1 e 2.
Resposta original:
Para uma solução rápida, assistir à tela "Arquivo de configuração YAML" de Ryan Bates deve ser muito útil.
Em suma:
fonte
RAILS_ENV
porRails.env
eRAILS_ROOT
porRails.root
.No Rails 3, os dados de configuração personalizados específicos do aplicativo podem ser colocados no objeto de configuração do aplicativo. A configuração pode ser atribuída nos arquivos de inicialização ou nos arquivos de ambiente - digamos, para um determinado aplicativo
MyApp
:ou
Para ler a configuração, basta chamar a variável de configuração sem defini-la:
UPDATE Rails 4
No Rails 4, existe uma nova maneira de isso => http://guides.rubyonrails.org/configuring.html#custom-configuration
fonte
config/environments/production.rb
Config:config.whatever = false
acesse em qualquer lugar:Rails.configuration.whatever
undefined method
.No Rails 3.0.5, a seguinte abordagem funcionou para mim:
Em
config/environments/development.rb
, writeO valor
custom_config_key
pode ser referenciado a partir de outros arquivos usandofonte
undefined method
.method_missing': undefined method
store" para # <Rails :: Application :: Configuration: 0x007f9f735b7240> ... ". Eu estava tentando adicionar a variável de configuração "config.store.works".store
é. Para usar o método nesta resposta, você pode renomear sua variávelstore_works
ou criar umconfig.store
bloco com asworks
definições definidas.Isso funciona nos trilhos 3.1:
em config / environment.rb (ou em config / environment / .. para direcionar um ambiente específico):
Isso estará acessível no controlador ou em visualizações como esta:
(YourApp deve ser substituído pelo nome do seu aplicativo.)
Nota : É código Ruby, portanto, se você tiver muitas chaves de configuração, poderá fazer o seguinte:
em config / environment.rb:
fonte
No Rails 4
Supondo que você coloque suas variáveis personalizadas em um arquivo yaml:
Crie um inicializador para carregá-los:
Agora, em qualquer lugar do seu aplicativo, você pode acessar esses valores da seguinte forma:
É conveniente
Rails.application.config_for :acme
carregar o seuacme.yml
e usar o ambiente correto.fonte
Desde o Rails 4.2, sem gemas adicionais, você pode carregar o config / hi.yml simplesmente usando
Rails.application.config_for :hi
.Por exemplo:
touch config/passwords.yml
touch config/initializers/constants.rb
e agora você pode usar
AUTHENTICATION
constante em qualquer lugar do seu aplicativo:em seguida, adicione passwords.yml a .gitignore :
echo /config/passwords.yml >> .gitignore
, criar um arquivo de exemplo para o seu confortocp /config/passwords.yml /config/passwords.example.yml
e, em seguida, basta editar seu arquivo de exemplo na sua consola de produção com valores de produção reais.fonte
Eu só queria atualizar isso para obter as novidades interessantes do Rails 4.2, agora você pode fazer isso em qualquer um dos seus
config/**/*.rb
arquivos:... e isso estará disponível no seu aplicativo como:
Veja mais aqui: http://guides.rubyonrails.org/configuring.html#custom-configuration
fonte
Confira esta jóia pura fazendo exatamente isso: https://github.com/mislav/choices
Dessa forma, seus dados confidenciais não serão expostos em projetos de código aberto
fonte
Criei um plug-in simples para as configurações de YAML: Yettings
Funciona de maneira semelhante ao código na resposta do khelll, mas você só precisa adicionar este arquivo de configuração YAML:
O plug-in cria dinamicamente uma classe que permite acessar as configurações YML como métodos de classe no seu aplicativo, da seguinte maneira:
Além disso, se você quiser usar vários arquivos de configurações com nomes exclusivos, poderá colocá-los em um subdiretório dentro de app / config como este:
Então você pode acessar os valores como este:
Ele também fornece configurações padrão que podem ser substituídas por ambiente. Você também pode usar erb dentro do arquivo yml.
fonte
Eu realmente gosto da jóia settingslogic . Muito fácil de configurar e usar.
https://github.com/binarylogic/settingslogic
fonte
Se você usa o Heroku ou precisa manter as configurações do aplicativo como variáveis de ambiente, a gema figaro é muito útil.
fonte
Eu gosto de usar o rails-settings para valores globais de configuração que precisam ser alterados via interface da web.
fonte
Algo que estamos começando a fazer no trabalho é o Hash Ordenado do ActiveSupport
O que permite definir sua configuração de maneira limpa dentro dos arquivos do ambiente, por exemplo
fonte
Eu sugeriria uma boa abordagem sobre como lidar com a configuração em seu aplicativo. Existem três regras básicas:
Para ter uma visão geral mais detalhada, siga este link: Configuração do Rails da maneira correta
fonte