如何在Rails 3应用程序中列出所有已定义的环境?

时间:2012-12-26 17:06:30

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我想知道是否有办法在Rails应用程序中列出所有已定义的环境。

例如,如果一个应用程序有4个已定义的环境(生产,登台,开发,测试),我想获得以下数组

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

有什么想法吗?感谢

5 个答案:

答案 0 :(得分:15)

我不确定您是否可以通过一些Rails API获取已定义环境的列表。环境文件已加载dynamically based on the current environment。如前所述,您可以为任何config/environments文件添加.rb目录。

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

如果您想获得database中定义的所有database.yml个环境的列表,可以从以下位置获取列表:

ActiveRecord::Base.configurations.keys

假设您实际上正在使用AR。

答案 1 :(得分:2)

试试这个

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

答案 2 :(得分:1)

在Rails 3中,您可以执行以下操作:Rails.root返回Pathname对象

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

答案 3 :(得分:0)

扫描.rb的配置/环境。作为想法。

答案 4 :(得分:0)

你走了:

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