如何列出 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 应用程序中所有定义的环境?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 3 / 设置自定义环境变量

如何列出 c/c++ 应用程序中的所有环境变量

列出Matlab中的所有环境变量

如何为 Rails 中枚举中列出的角色添加模型?

如何在 Rails 局部视图中创建行空间?

如何仅列出属于我的 Rails 应用程序的 Rake 任务(没有不可维护的 grep 语句)?