2012-05-10 40 views
6

Tôi không thể truy cập các biến env trong bảng điều khiển Rails, trong khi trong ứng dụng chúng hoạt động.Biến môi trường trong bảng điều khiển Rails và Pow

Trong .powenv Tôi có export SENDGRID_PASSWORD="123"

Trong config/initializers/mail.rb có:

ActionMailer::Base.smtp_settings = { 
    :password => ENV['SENDGRID_PASSWORD'] 
} 

Vì vậy, trong giao diện điều khiển khi tôi gõ UserMailer.welcome_mail.deliver có một lỗi 'ArgumentError: SMTP-AUTH yêu cầu nhưng thiếu cụm từ bí mật'. Tuy nhiên từ ứng dụng nó sẽ gửi thư thành công.

Làm cách nào để tạo các biến env trong bảng điều khiển?

+0

Bạn đã thử cài đặt nó một cách rõ ràng trong bảng điều khiển chưa? SENDGRID_PASSWORD = 123 && UserMailer.welcome_mail.deliver –

+0

Không, nó cũng không hoạt động theo cách này. –

+1

err Tôi có nghĩa là: 'SENDGRID_PASSWORD = 123 đường ray console' –

Trả lời

4

bạn Rails console là không thể truy cập vào biến môi trường vì Pow đi thông tin từ các .powenv hoặc .powrc tập tin vào Rails ... Rails không đọc những tập tin trên riêng của mình.

Nói cách khác, bạn đang đặt biến số ENV['SENDGRID_PASSWORD'] trong tệp .powenv, nhưng tệp đó không bị xúc động khi bạn khởi động bảng điều khiển Rails.

Bạn sẽ cần phải thiết lập một before_filter trong điều khiển ứng dụng của bạn mà đặt ENV['SENDGRID_PASSWORD'] (hoặc đi lên với nhau, tương tự, cách đọc trong file .powenv từ bên trong before_filter rằng trong ứng dụng Rails của bạn).

+0

" (hoặc đến với cách khác, tương tự, cách đọc trong tệp .powenv từ bên trong before_filter trong ứng dụng Rails của bạn) "Vâng, điều đó sẽ tuyệt vời ... :) Bất kỳ ý tưởng? –

+0

Tôi không biết nếu bạn muốn thực sự đọc tệp '.powenv' từ ứng dụng Rails của bạn, vì có thể có những thứ khác trong đó bạn không muốn/cần phải tải lại mỗi lần. –

+0

Nếu tập tin '.powenv' của bạn siêu sạch sẽ và mỗi dòng chỉ đặt biến môi trường, thì bạn có thể đọc nó theo từng dòng trong' before_filter'. 'Before_filter' có thể thực thi mỗi dòng nó đọc ra khỏi tập tin. ... Tôi khá chắc chắn có tất cả các loại điều sai trái xảy ra với ý tưởng này, mặc dù ... –

11

thử

. .powenv 

sau đó

rails c 

(dấu chấm là một lệnh để chạy kịch bản về môi trường hiện hành)

2

Đối với hậu thế, bạn có thể thêm một cái gì đó như thế này để một trong hai môi trường của bạn. rb, development.rb hoặc bộ khởi tạo (config/initializers/pow.rb) tùy thuộc vào thứ tự tải bạn muốn:

 
# Load pow environment variables into development and test environments 
if File.exist?(".powenv") 
    IO.foreach('.powenv') do |line| 
    next if !line.include?('export') || line.blank? 
    key, value = line.gsub('export','').split('=',2) 
    ENV[key.strip] = value.delete('"\'').strip 
    end 
end 
Các vấn đề liên quan