2012-06-04 39 views
5

Tôi đang chạy một ứng dụng từ người giám sát và tôi phải thiết lập một môi trường cho nó. Có khoảng 30 biến môi trường cần được thiết lập. Tôi đã thử đặt tất cả trên một ảnh lớnbiến môi trường giám sát thiết lập ứng dụng

environment =

và điều đó dường như không hoạt động. Tôi cũng đã thử nhiều dòng = môi trường, và điều đó dường như không hoạt động. Tôi cũng đã thử cả hai có và không có 'xung quanh giá trị env.

Cách tốt nhất để thiết lập môi trường của tôi sao cho nó vẫn còn nguyên vẹn dưới sự kiểm soát của người giám sát? Tôi có nên gọi chương trình thực tế của tôi (lốc xoáy, fwiw) từ một tập lệnh shell có môi trường được tải sẵn không? Lý tưởng nhất, tôi muốn đặt tất cả các biến môi trường vào một tập tin bao gồm và tải chúng với người giám sát, nhưng tôi mở để làm điều đó một cách khác.

UPDATE:

Dưới đây là những gì tôi đang sử dụng trong file conf:

environment= 
    PYTHONPATH=/srv/obsf/current/:$PYTHONPATH, 
    PYTHON_EGG_CACHE=/srv/obfs/current/.python-eggs, 
    OBFS_API_ENVIRONMENT_STAGE=test, 

này diễn ra trong khoảng 30 dòng, với rất nhiều biến môi trường. Khi tôi thực hiện chương trình, nó bị treo ngay lập tức phàn nàn rằng biến môi trường OBFS_API_ENVRIONMENT_STAGE không được thiết lập.

+0

Cuối cùng tôi đã sử dụng nó, định dạng 'environment = KEY = val, KEY2 = val2' đã hoạt động. Bạn có thể dán dòng bạn đã thử không? – Bittrance

Trả lời

4

Khi nó quay ra, dấu phẩy sau là một vấn đề. Tôi trích dẫn tất cả các chuỗi env và loại bỏ dấu phẩy sau. Tất cả các công trình hiện nay.

+0

Xin chúc mừng! Khi bạn có thể, hãy đảm bảo đánh dấu câu trả lời của bạn là 'được chấp nhận' để những người khác có thể học hỏi từ thành công của bạn. Chúc mừng ~ –

+0

Trích dẫn các biến ENV mà tôi đang cố gắng thêm vào cho tôi. Cảm ơn. – shawn

+0

Thật vậy, dấu phẩy sẽ dẫn đến kết quả của dòng tiếp theo được intepreted như một môi trường. – WhyNotHugo

8

Các relevant documentation section giải thích rằng bạn cần phải liệt kê các biến như cặp khóa/giá trị bằng dấu phẩy:

môi trường

Một danh sách các cặp khóa/giá trị ở dạng KEY = val, key2 = val2 sẽ được đặt trong môi trường của quy trình giám sát (và kết quả là trong tất cả môi trường của quy trình con). Tùy chọn này có thể bao gồm giá trị% (ở đây) s, mở rộng đến thư mục trong đó tệp cấu hình giám sát đã được tìm thấy. Lưu ý rằng các tiến trình con sẽ kế thừa các biến môi trường của vỏ được sử dụng để bắt đầu giám sát ngoại trừ các biến được ghi đè ở đây và trong phạm vi cấu hình môi trường của chương trình.

Các example for this section cũng sử dụng dấu phẩy:

environment = KEY1=value1,KEY2=value2 

Bên này là parsed into a dict sử dụng python shlex lexer, vì vậy nó sẽ đối phó với trích dẫn đúng cách. Nó cũng sẽ xóa khoảng trắng, để làm cho mọi thứ dễ đọc hơn, bạn có thể phân chia mọi thứ qua nhiều dòng:

environment = 
    KEY1="Some longer value containing whitespace", 
    KEY2=value2-on-a-new-line, 

Lưu ý rằng dấu phẩy là tùy chọn; nó sẽ không tạo ra sự khác biệt trong đầu ra.

Thiếu dấu phẩy sau KEY1 tuy nhiên có thể dẫn đến giá trị lạ (ví dụ trên, trừ dấu phẩy sau whitespace" sẽ cung cấp cho bạn {'KEY1': 'Some longer value containing whitespace', '=': ','} làm môi trường) vì yêu cầu ký bằng không được kiểm tra nghiêm ngặt. Tôi đã submitted a pull request để khắc phục điều đó.

+0

> Lưu ý rằng dấu phẩy sau là tùy chọn; nó sẽ không tạo ra sự khác biệt trong đầu ra. WhyNotHugo

+0

@Hugo: đó là dòng tiếp theo thụt vào? Dòng tiếp theo là * không được chuyển tới mã xử lý giá trị *. Tôi sẽ xem lại điều này một lần nữa vào ngày mai, nhưng cách trình phân tích cú pháp cấu hình (thư viện chuẩn Python) hoạt động, những gì bạn mô tả là không thể. –

+0

@Hugo: xem lại mã lần nữa, không có cách nào dấu phẩy có thể kéo vào dòng tiếp theo từ cấu hình. Bạn có thể vui lòng chỉ cho tôi một cấu hình mẫu (sử dụng Gist hoặc Pastie) thể hiện hành vi đó không? –

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