9

Tôi đã tự hỏi nếu có một cách để liệt kê tất cả các môi trường được xác định trong một ứng dụng Rails.Cách liệt kê tất cả các môi trường được xác định trong ứng dụng Rails 3?

Ví dụ nếu một ứng dụng có 4 môi trường được định nghĩa (sản xuất, dàn dựng, phát triển, thử nghiệm) Tôi muốn có được những mảng sau

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

Bất kỳ ý tưởng? Cảm ơn

+0

Bạn có thể cho một chút ngữ cảnh tại sao bạn lại muốn làm điều này? Có thể có các giải pháp thay thế cho vấn đề của bạn .. –

+1

@EmilKampp Tôi chỉ muốn kiểm tra xem tệp cấu hình yaml có chứa cài đặt cho từng môi trường được xác định không – Dorian

Trả lời

14

Tôi không chắc liệu bạn có thể nhận được danh sách các môi trường được xác định thông qua một số API Rails hay không. Các tệp môi trường được tải dynamically based on the current environment. Như đã đề cập, bạn có thể chỉ cần điền vào thư mục config/environments cho bất kỳ tệp .rb nào.

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

Nếu bạn muốn có được một danh sách tất cả database môi trường quy định tại database.yml, bạn có thể nhận được danh sách các từ:

ActiveRecord::Base.configurations.keys 

Giả sử bạn đang thực sự sử dụng AR.

+0

Cảm ơn @Jiri, câu trả lời của bạn là câu trả lời hoàn chỉnh nhất cho đến bây giờ! – Dorian

+1

Một sửa đổi nhỏ cho câu trả lời ở trên. Nếu bạn có một tập tin không phải là ruby ​​trong thư mục môi trường của bạn, đoạn mã sau đây sẽ liệt kê nó như một môi trường hợp lệ, mà nó không phải là. – Jakobinsky

+0

Bắt tốt. Đã sửa. –

0

Quét cấu hình/môi trường cho .rb. Như ý tưởng.

1

Trong Rails 3 bạn có thể làm như sau như Rails.root trả về một Pathname đối tượng

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

Hãy thử điều này

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

Ở đây bạn đi:

environments = Dir.entries(Rails.root.join("config","environments").to_s).grep(/\.rb$/).map { |fname| fname.chomp!(".rb") } 
Các vấn đề liên quan