2011-12-13 26 views
12

Giả sử tôi đang bắt đầu ứng dụng Flask dưới gunicorn theo http://gunicorn.org/deploy.html#runit, có cách nào để tôi bao gồm/phân tích cú pháp/truy cập đối số dòng lệnh bổ sung không?Sử dụng các đối số dòng lệnh bổ sung bằng gunicorn

Ví dụ: tôi có thể bao gồm và phân tích cú pháp tùy chọn foo trong ứng dụng Flask của mình bằng cách nào đó không?

gunicorn mypackage:app --foo=bar 

Cảm ơn,

Trả lời

20

Bạn không thể vượt qua đối số dòng lệnh trực tiếp nhưng bạn có thể chọn cấu hình ứng dụng một cách dễ dàng đủ.

$ gunicorn 'mypackage:build_app(foo="bar")' 

Sẽ gọi hàm "build_app" đi qua foo = "bar" kwarg như mong đợi. Hàm này sau đó sẽ trả về WSGI có thể gọi được sẽ được sử dụng.

+0

Cảm ơn! Đã ở đây khi tìm kiếm cách chuyển nhiều đối số. Hóa ra là đơn giản như truyền chúng như các giá trị được phân cách bằng dấu phẩy; ví dụ: '(foo =" bar ", foo1 =" bar1 ")' –

2

Tôi thường đặt nó trong __init.py__ sau main() và sau đó tôi có thể chạy có hoặc không có gunicorn (giả sử bạn main() hỗ trợ các chức năng khác quá).

# __init__.py 

# Normal entry point 
def main(): 
    ... 

# Gunicorn entry point generator 
def app(*args, **kwargs): 
    # Gunicorn CLI args are useless. 
    # https://stackoverflow.com/questions/8495367/ 
    # 
    # Start the application in modified environment. 
    # https://stackoverflow.com/questions/18668947/ 
    # 
    import sys 
    sys.argv = ['--gunicorn'] 
    for k in kwargs: 
     sys.argv.append("--" + k) 
     sys.argv.append(kwargs[k]) 
    return main() 

Bằng cách đó bạn có thể chạy đơn giản với ví dụ:

gunicorn 'app(foo=bar)' ... 

main() của bạn có thể sử dụng mã chuẩn dự kiến ​​các đối số trong sys.argv.

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