9

我想知道是否有辦法在Rails應用程序中列出所有已定義的環境。如何在Rails 3應用程序中列出所有定義的環境?

例如,如果一個應用程序有4度定義的環境(生產,分期,開發,測試)我想有獲得以下數組

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

任何想法?謝謝

+0

你能不能給一點背景知識至於你爲什麼想要這樣做?有可能是你的問題的替代解決方案.. –

+1

@EmilKampp我只是想測試一個yaml配置文件包含每個定義的環境設置 – Dorian

回答

14

我不確定您是否可以通過某些Rails API獲取已定義環境的列表。環境文件被加載dynamically based on the current environment。因此,如前所述,您可以將任何.rb文件的config/environments目錄進行整合。

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

如果你想在database.yml定義的所有database環境的列表,你可以從列表:

ActiveRecord::Base.configurations.keys 

你實際上是用AR假設。

+0

謝謝@Jiri,你的答案是迄今爲止最完整的答案! – Dorian

+1

對上述答案的一個小修改。如果您的環境文件夾中有非ruby文件,則以下片段將其列爲有效環境,而不是。 – Jakobinsky

+0

好的。固定。 –

0

掃描.rb的配置/環境。作爲想法。

1

在Rails 3,你可以做以下爲Rails.root返回Pathname對象

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

試試這個

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

在這裏你去:

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