我想知道是否有辦法在Rails應用程序中列出所有已定義的環境。如何在Rails 3應用程序中列出所有定義的環境?
例如,如果一個應用程序有4度定義的環境(生產,分期,開發,測試)我想有獲得以下數組
["production", "staging", "development", "test"]
任何想法?謝謝
我想知道是否有辦法在Rails應用程序中列出所有已定義的環境。如何在Rails 3應用程序中列出所有定義的環境?
例如,如果一個應用程序有4度定義的環境(生產,分期,開發,測試)我想有獲得以下數組
["production", "staging", "development", "test"]
任何想法?謝謝
我不確定您是否可以通過某些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假設。
謝謝@Jiri,你的答案是迄今爲止最完整的答案! – Dorian
對上述答案的一個小修改。如果您的環境文件夾中有非ruby文件,則以下片段將其列爲有效環境,而不是。 – Jakobinsky
好的。固定。 –
掃描.rb的配置/環境。作爲想法。
在Rails 3,你可以做以下爲Rails.root
返回Pathname對象
Dir[Rails.root.join('config', 'environments', '*.rb')].map { |fname| File.basename(fname, '.*') }
試試這個
Env_path = "#{RAILS_ROOT}/config/environments"
all_env = Dir.entries(Env_path) - ['.','..']
environments = []
all_env.each{|env| environments << env.gsub(".rb", '')}
print environments
在這裏你去:
environments = Dir.entries(Rails.root.join("config","environments").to_s).grep(/\.rb$/).map { |fname| fname.chomp!(".rb") }
你能不能給一點背景知識至於你爲什麼想要這樣做?有可能是你的問題的替代解決方案.. –
@EmilKampp我只是想測試一個yaml配置文件包含每個定義的環境設置 – Dorian