9

Ich frage mich, ob es eine Möglichkeit gibt, alle definierten Umgebungen in einer Rails-Anwendung aufzulisten.Wie listen Sie alle definierten Umgebungen in einer Rails 3-Anwendung auf?

Zum Beispiel, wenn eine Anwendung verfügt über 4 definierten Umgebungen (Produktion, Inszenierung, Entwicklung, Test) Ich mag würde

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

Irgendwelche Ideen die folgenden Array haben zu erhalten? Danke

+0

Können Sie ein wenig Kontext geben Warum willst du das machen? Es könnte alternative Lösungen für Ihr Problem geben .. –

+1

@EmilKampp Ich möchte nur testen, dass eine Yaml Konfigurationsdateien Einstellungen für jede definierte Umgebung enthält – Dorian

Antwort

14

Ich bin nicht sicher, ob Sie die Liste der definierten Umgebungen über einige Rails API erhalten können. Umgebungsdateien werden geladen dynamically based on the current environment. Wie bereits erwähnt, können Sie einfach das Verzeichnis config/environments für jede .rb Datei glob.

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

Wenn Sie eine Liste aller database Umgebungen in database.yml definiert erhalten möchten, können Sie die Liste von erhalten:

ActiveRecord::Base.configurations.keys 

Sie Angenommen werden AR tatsächlich verwendet wird.

+0

Dank @Jiri, ist Ihre Antwort die vollständigste Antwort bis jetzt! – Dorian

+1

Eine kleine Korrektur zur obigen Antwort. Wenn Sie eine nicht-Ruby-Datei in Ihrem Umgebungsordner haben, listet das folgende Snippet es als gültige Umgebung auf, was nicht der Fall ist. – Jakobinsky

+0

Guter Fang. Fest. –

0

Scan Konfig/Umgebungen für .rb. Als Idee.

1

In Rails 3 Sie folgendes tun können als Rails.root gibt ein Pathname Objekt

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

Versuchen Sie, diese

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

Hier gehen Sie:

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