11

Railsアプリケーションで定義されたすべての環境を一覧表示する方法があるかどうか疑問に思いました。

たとえば、アプリケーションに4つの定義済み環境(本番、ステージング、開発、テスト)がある場合、次の配列を取得したいと思います。

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

何か案は?ありがとう

4

5 に答える 5

16

RailsAPIを介して定義された環境のリストを取得できるかどうかはわかりません。環境ファイルは、現在の環境に基づいて動的にロードされます。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では、 PathnameオブジェクトをRails.root返すように次のことを行うことができます

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

config/environmentsで.rbをスキャンします。アイデアとして。

于 2012-12-26T18:07:44.473 に答える