9

Mi chiedevo se esiste un modo per elencare tutti gli ambienti definiti in un'applicazione Rails.Come elencare tutti gli ambienti definiti in un'applicazione Rails 3?

Per esempio, se un programma ha 4 ambienti definiti (produzione, messa in scena, lo sviluppo, di test) Mi piacerebbe avere ottenere il seguente array

["production", "staging", "development", "test"] 

Tutte le idee? Grazie

+0

si può dare un po 'di contesto sul perché vorresti farlo? Potrebbero esserci soluzioni alternative per il tuo problema .. –

+1

@EmilKampp Voglio solo verificare che un file di configurazione yaml contenga impostazioni per ogni ambiente definito – Dorian

risposta

14

Non sono sicuro di poter ottenere l'elenco degli ambienti definiti tramite alcune API Rails. I file dell'ambiente vengono caricati dynamically based on the current environment. Quindi, come già accennato, è possibile glob la directory config/environments per qualsiasi file .rb.

Dir.glob("./config/environments/*.rb").map { |filename| File.basename(filename, ".rb") } 

Se si desidera ottenere un elenco di tutti database ambienti definiti in database.yml, è possibile ottenere l'elenco da:

ActiveRecord::Base.configurations.keys 

Supponendo che si sta effettivamente utilizzando AR.

+0

Grazie a @Jiri, la tua risposta è la risposta più completa fino ad ora! – Dorian

+1

Una piccola correzione alla risposta di cui sopra. Se nella cartella degli ambienti è presente un file non ruby, il frammento seguente lo elencherà come un ambiente valido, il che non lo è. – Jakobinsky

+0

Buona presa. Fisso. –

0

Config di scansione/ambienti per .rb. Come idea

1

in Rails 3 è possibile eseguire le seguenti operazioni come Rails.root restituisce un Pathname oggetto

Dir[Rails.root.join('config', 'environments', '*.rb')].map { |fname| File.basename(fname, '.*') } 
2

Prova questa

Env_path = "#{RAILS_ROOT}/config/environments" 
all_env = Dir.entries(Env_path) - ['.','..'] 
environments = [] 
all_env.each{|env| environments << env.gsub(".rb", '')} 
print environments 
0

Qui si va:

environments = Dir.entries(Rails.root.join("config","environments").to_s).grep(/\.rb$/).map { |fname| fname.chomp!(".rb") }