2012-05-11 13 views
6

Chúng tôi đang chạy các máy chủ ubuntu với Nginx + Phusion Passenger cho các ứng dụng đường ray 3.0x của chúng tôi.phusion hành khách không nhìn thấy biến môi trường?

Tôi có một biến môi trường thiết lập trong/etc/môi trường trên các máy thử nghiệm:

MC_TEST=true 

Nếu tôi chạy một giao diện điều khiển (đường ray bó exec c) và đầu ra ENV [ "MC_TEST"] Tôi thấy 'true '. Nhưng, nếu tôi đặt cùng một mã trên một trang (<% = ENV ["MC_TEST"]%>) thì nó không thấy gì cả. Biến đó không tồn tại.

nào tôi dẫn đến câu hỏi:

1 - cách thích hợp để có được các biến môi trường vào hành khách với nginx (không apache setenv) là gì?

2 - Tại sao hành khách không có môi trường phù hợp?

Trả lời

7

Hợp nhất hành khách v4 + cho phép đọc biến môi trường trực tiếp từ tệp bashrc. Hãy chắc chắn rằng bashrc sống trong thư mục nhà của người sử dụng, theo đó quá trình hành khách được thực hiện (trong trường hợp của tôi, nó là Ubuntu, cho linux EC2 và nginx)

Đây là documentation mà đi vào chi tiết của bashrc

+0

Phần tài liệu đó giải thích * mọi thứ * bạn cần về biến môi trường. Chúng là gì, chúng hoạt động như thế nào, tài sản của chúng và cách chuyển chúng đến các ứng dụng được phục vụ cho hành khách Phusion. – Hongli

+0

Chỉ cần một lưu ý, nhưng điều này hoạt động theo mặc định ngay cả trong vỏ không tương tác. – digicazter

4

Tôi đã cùng một vấn đề với bạn khi sử dụng hành khách với nginx và nginx init script trên ubuntu. Lý do là tôi sử dụng dịch vụ sudo nginx restart (được cài đặt bởi init script) để khởi động nginx và
nó đang chạy bởi root và root không nhận biến môi trường người dùng đăng nhập của bạn. Có hai giải pháp cho việc này. Một tài khoản đang chạy nginx theo cách thủ công.

sudo service nginx stop 
sudo -E /path/to/your/nginx 

một là thêm env để nginx init script của bạn

export MC_TEST=true 

Giải pháp thứ hai là bằng cách nào đó xấu xí, nhưng nó hoạt động. Và tôi nghĩ rằng cách tốt hơn là tìm thấy một cấu hình để nói cho init script để bảo vệ người dùng đăng nhập env.

+0

Chạy nginx theo cách thủ công đã thực hiện thủ thuật cho tôi. Cảm ơn! – Myxtic

0

Tôi có một giải pháp xấu xí khác.

env_file = '/etc/environment' 
if File.exist?(env_file) 
    text = File.open(env_file).read 
    text.each_line do |line| 
    key, val = line.split('=', 2) 
    ENV[key] = val.strip 
    end 
end