如何列出 Rails 3 应用程序中所有定义的环境?
Posted
技术标签:
【中文标题】如何列出 Rails 3 应用程序中所有定义的环境?【英文标题】:How to list all defined environments in a Rails 3 application? 【发布时间】:2012-12-12 04:43:15 【问题描述】:我想知道是否有一种方法可以列出 Rails 应用程序中所有已定义的环境。
例如,如果一个应用程序有 4 个已定义的环境(生产、登台、开发、测试),我希望获得以下数组
["production", "staging", "development", "test"]
有什么想法吗?谢谢
【问题讨论】:
您能否介绍一下您为什么要这样做?您的问题可能有其他解决方案.. @EmilKampp 我只想测试一个 yaml 配置文件是否包含每个已定义环境的设置 【参考方案1】:扫描 .rb 的配置/环境。作为想法。
【讨论】:
【参考方案2】:我不确定您是否可以通过某些 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.to_h.keys
假设您实际使用的是 AR。
【讨论】:
感谢@Jiri,您的回答是迄今为止最完整的回答!【参考方案3】:在 Rails 3 中,您可以执行以下操作,因为 Rails.root
返回一个 Pathname 对象
Dir[Rails.root.join('config', 'environments', '*.rb')].map |fname| File.basename(fname, '.*')
【讨论】:
【参考方案4】:试试这个
Env_path = "#RAILS_ROOT/config/environments"
all_env = Dir.entries(Env_path) - ['.','..']
environments = []
all_env.each|env| environments << env.gsub(".rb", '')
print environments
【讨论】:
【参考方案5】:给你:
environments = Dir.entries(Rails.root.join("config","environments").to_s).grep(/\.rb$/).map |fname| fname.chomp!(".rb")
【讨论】:
以上是关于如何列出 Rails 3 应用程序中所有定义的环境?的主要内容,如果未能解决你的问题,请参考以下文章