2016-04-01 22 views
5

Tôi có ứng dụng Flask mà tôi đang cố gắng phân phát qua Gunicorn.Gunicorn không tải ứng dụng Flask

Tôi đang sử dụng virtualenv và python3. Nếu tôi kích hoạt cd venv tôi để dir cơ sở ứng dụng của tôi sau đó chạy:

gunicorn mysite:app 

tôi nhận được:

Starting gunicorn 
Listening at http://127.0.0.1:8000 
DEBUG:mysite.settings:>>Config() 
... 
Failed to find application: 'mysite' 
Worker exiting 
Shutting down: master 
Reason: App failed to load 

Nhìn trong/etc/nginx/sites-available tôi chỉ có file 'mặc định'. Trong các trang web đã bật, tôi không có tệp nào.

Trong file nginx.conf của tôi, tôi có:

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*; 

App cấu trúc:

mysite #this is where I cd to and run gunicorn mysite:app 
--manage.py 
--/mysite 
----settings.py 
----__init__.py 

trong manage.py cho mysite Tôi đã sau:

logger.debug("manage.py entry point") 
app = create_app(app_name) 
manager = Manager(app) 

if __name__ == "__main__": 
    manager.run() 

Trong __init__.py file:

def create_app(object_name): 
    app = Flask(__name__) 
    #more setup here 
    return app 

Trong tôi settings.py trong thư mục ứng dụng

class Config(object): 
    logger.debug(">>Config()") #this logs OK so gunicorn is at least starting in correct directory 

Từ bên trong virtualenv nếu tôi chạy

print(sys.path) 

Tôi tìm thấy một đường dẫn đến python và trang web gói cho virtualenv này.

Từ những gì tôi đã đọc để bắt đầu gunicorn nó chỉ là một vấn đề cài đặt nó và chạy gunicorn mysite: Ứng dụng

Chạy gunicorn từ thư mục cha của mysite Tôi nhận được cùng một thất bại trong việc tìm ứng dụng: 'mysite', Ứng dụng không tải được lỗi nhưng không nhận được DEBUG ... Config() đã đăng nhập (vì chúng tôi rõ ràng nằm trong thư mục sai để bắt đầu). Chạy gunicorn từ mysite/mysite (rõ ràng là sai) Tôi nhận được và Exception trong quy trình công nhân ereor, ImportError: Không có module có tên 'mysite'.

Bất kỳ manh mối nào về cách tôi có thể chạy gunicorn?

Trả lời

6

Bạn đang trỏ gunicorn tại mysite:app, tương đương với from mysite import app. Tuy nhiên, không có đối tượng app ở trên cùng (__init__.py) mức nhập của mysite. Nói gunicorn để gọi cho nhà máy.

gunicorn "mysite:create_app()" 

Bạn cũng có thể chuyển đối số cho cuộc gọi.

gunicorn "mysite:create_app('production')" 

Bên trong, đây là tương đương với:

from mysite import create_app 
app = create_app('production') 

Ngoài ra, bạn có thể sử dụng một file riêng biệt mà không được thiết lập. Trong trường hợp của bạn, bạn đã khởi tạo một số app trong manage.py.

gunicorn manage:app 
Các vấn đề liên quan