2013-03-28 33 views
5
task :some_task, :environment do |t, args| 
    puts Rails.env #=> development, production, etc 
    puts ENV #=> {} 
end 

Tôi đặt một số biến môi trường (qua địa chỉ .env hoặc qua Heroku Config qua Herokusan), chẳng hạn như AWS bucket để sử dụng và tôi muốn tham chiếu chúng trong cào nhiệm vụ, nhưng ENV là một băm rỗng. Tôi biết một cái gì đó liên quan đến môi trường được thực hiện vì sự phụ thuộc nhiệm vụ :environment và rằng Rails.env có một giá trị, nhưng tôi không rõ ràng về các chi tiết.Sử dụng biến môi trường trong nhiệm vụ Rake

Vì vậy, làm cách nào tôi có thể sử dụng ENV trong tác vụ Rake?

+0

Làm thế nào bạn có đang chạy nhiệm vụ này? ENV là một điều cốt lõi của Ruby, vì vậy nó luôn luôn phản ánh các biến môi trường có sẵn của bạn. –

+2

'$ rake some_task' trong thư mục ứng dụng. Một số 'ENV' nằm trong' .env', và tôi có thể cần phải làm '$ foreman run rake task' cho công cụ Heroku. – Narfanator

+1

@Narfanator bạn nên trả lời câu trả lời này như một câu trả lời thực tế để tôi có thể upvote bạn. Chạy '$ foreman run rake some_task' là câu trả lời đúng –

Trả lời

5

Hai cách hay để thực hiện:

Sử dụng công cụ "Foreman" của Heroku. Đặt tất cả các biến môi trường của bạn vào .env:

VAR=value 

và chạy foreman run rake some_task.

Hoặc (và, tôi muốn giới thiệu theo cách này), sử dụng đá quý "Figaro". Đặt các vars của bạn vào config/application.yml:

VAR: value 

và thế là xong; rake some_task.

tôi khuyên bạn nên sau này, nếu chỉ vì rake figaro:heroku sẽ đẩy env của bạn lên khi nó được quy định tại application.yml

+0

Tôi biết đây là một câu hỏi cũ, nhưng cách đặt chúng trong một tập tin .env hoặc application.yml giữ mật khẩu/khóa của bạn ra khỏi codebase? Tôi nghĩ đó là một lý do quan trọng để sử dụng các biến ENV. Không phải là có một số cuộc gọi chúng ta có thể làm từ Rake mà sẽ lấy chúng? – JosephK

+0

Bạn (thường) không kiểm tra ứng dụng của bạn.yml hoặc .env vào repo; đó là những gì tôi có nghĩa là "codebase", và đặt chúng trực tiếp vào ENV của máy tính chủ chạy vào các vấn đề riêng của nó. Câu hỏi của tôi * là * về cơ bản yêu cầu một số cuộc gọi chúng tôi có thể làm từ Rake, nhưng tôi đã không tìm thấy một. – Narfanator

+0

Nhiều nhà phát triển có kinh nghiệm tại công ty của tôi đã quyết định sử dụng mẫu này: 'config = YAML.load (" application.yml ")', nhưng họ cũng quyết định không giải thích tại sao. YMMV; Tôi sử dụng nó trong một số tình huống (ví dụ, sinatra) và không phải trong những tình huống khác (ví dụ, đường ray). – Narfanator

Các vấn đề liên quan