22

Tôi đang sử dụng quản đốc để khởi động máy chủ phát triển đường ray của mình. Thật tuyệt khi tôi có thể đặt tất cả các biến môi trường của tôi trong tệp .env. Có cách nào để làm điều tương tự cho môi trường thử nghiệm của tôi không?Làm cách nào để tôi nhận được bộ biến ENV cho rspec?

Tôi muốn đặt khóa API mà tôi sẽ sử dụng với đá quý vcr, nhưng tôi không muốn thêm điều khiển API vào phiên bản. Bất kỳ đề xuất nào ngoài việc đặt biến môi trường theo cách thủ công khi tôi bắt đầu kịch bản thử nghiệm của mình?

Trả lời

23

Bạn có thể sử dụng đá quý dotenv --- nó sẽ hoạt động giống như người quản lý và tải từ tệp .env. (Và một tập tin .env.test cho các môi trường thử nghiệm của bạn)

https://github.com/bkeepers/dotenv

+7

hoặc, như một sự thay thế , bạn có thể 'RAILS_ENV = test exec foreman run bundle exec rspec spec' –

+0

Đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn –

26

Nếu bạn chỉ cần thiết lập các biến môi trường, bạn có thể cài đặt chúng từ dòng lệnh:

SOMETHING=123 SOMETHING_ELSE="this is a test" rake spec 

Hoặc bạn có thể định nghĩa như sau ở đầu Rakefile hoặc spec_helper.rb của bạn:

ENV['SOMETHING']=123 
ENV['SOMETHING_ELSE']="this is a test" 

Nếu họ không luôn luôn áp dụng, bạn có thể sử dụng một điều kiện:

if something_needs_to_happen? 
    ENV['SOMETHING']=123 
    ENV['SOMETHING_ELSE']="this is a test" 
end 

Nếu bạn muốn sử dụng một tập tin Foreman .env, trông giống như:

SOMETHING=123 
SOMETHING_ELSE="this is a test" 

và biến nó thành những điều sau và eval nó:

ENV['SOMETHING']='123' 
ENV['SOMETHING_ELSE']='this is a test' 

Bạn có thể làm:

File.open("/path/to/.env", "r").each_line do |line| 
    a = line.chomp("\n").split('=',2) 
    a[1].gsub!(/^"|"$/, '') if ['\'','"'].include?(a[1][0]) 
    eval "ENV['#{a[0]}']='#{a[1] || ''}'" 
end 

mặc dù tôi không nghĩ rằng sẽ làm việc cho các giá trị nhiều dòng.

Và như @JesseWolgamott đã lưu ý, có vẻ như bạn có thể sử dụng gem 'dotenv-rails'.

+0

Câu trả lời này đặc biệt tốt hơn vì nó cung cấp các cách tiếp cận sẽ không dựa vào bất kỳ 'gem' cụ thể nào khi sử dụng các khung công tác tối giản như' Sinatra'. Cảm ơn! – fagiani

1

Một tùy chọn là đặt bí danh lệnh rspec cụ thể hơn một chút. Đặt dòng sau vào dấu chấm của bạn (.bashrc hoặc .profile hoặc thứ gì đó).

alias 'rspec'='RACK_ENV=test RAILS_ENV=test bundle exec rspec' 

Một lựa chọn khác là đặt biến môi trường trong các tập tin .env cụ thể:

# .env.test 

RAILS_ENV=test 
MONGODB_URI=mongodb://localhost/test 
# .. etc .. 

Sử dụng dotenv đá quý làm việc hoặc bạn có thể mang lại cho họ trong tay

$ export $(cat .env.test) && rspec 
Các vấn đề liên quan