11

我想知道是否有一种方法可以列出 Rails 应用程序中所有已定义的环境。

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

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

有任何想法吗?谢谢

4

5 回答 5

16

我不确定您是否可以通过某些 Rails API 获取已定义环境的列表。环境文件是根据当前环境动态加载的。因此,如前所述,您可以将config/environments任何.rb文件的目录通配到目录中。

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

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

ActiveRecord::Base.configurations.to_h.keys

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

于 2012-12-26T18:12:15.453 回答
2

尝试这个

Env_path = "#{RAILS_ROOT}/config/environments"
all_env = Dir.entries(Env_path) - ['.','..']
environments = []
all_env.each{|env| environments << env.gsub(".rb", '')} 
print environments
于 2012-12-27T12:42:44.943 回答
1

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

Dir[Rails.root.join('config', 'environments', '*.rb')].map { |fname| File.basename(fname, '.*') }
于 2012-12-27T09:20:36.897 回答
1

干得好:

environments = Dir.entries(Rails.root.join("config","environments").to_s).grep(/\.rb$/).map { |fname| fname.chomp!(".rb") }
于 2013-09-20T15:02:55.223 回答
0

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

于 2012-12-26T18:07:44.473 回答