![](/img/trans.png)
[英]unable to load configuration from uwsgi when attempting to run flask app via uwsg
[英]Unable to load configuration file from instance folder when deploying app
我為我的應用程序設置了一個新的virtualenv,以清理已安裝的軟件包。 我在app的實例文件夾中有一個config.py
文件。 有兩個配置,一個用於'instance'文件夾中的dev,另一個用於根文件夾中的production。 該應用程序在舊的環境中工作,但現在我收到一個錯誤,它無法找到配置文件。 為什么我會收到此錯誤,如何解決?
Traceback (most recent call last):
File "application.py", line 12, in <module>
application.config.from_pyfile('config.py')
File "/Users/pavsidhu/Envs/test/lib/python2.7/site-packages/flask/config.py", line 128, in from_pyfile
with open(filename) as config_file:
IOError: [Errno 2] Unable to load configuration file (No such file or directory): '/Users/pavsidhu/Envs/test/var/application-instance/config.py'
我的項目結構如下:
/Users/pavsidhu/Envs/test/
lib/python-3.4/site-packages/
bin/
application.py
static/
templates/
instance/
config.py
Flask認為您的應用程序已安裝在env中,因為您將其放在與env相同的基本目錄中。 此行為在文檔中有詳細描述。
已安裝的模塊或包裝:
$PREFIX/lib/python2.X/site-packages/myapp $PREFIX/var/myapp-instance
$ PREFIX是Python安裝的前綴。
當以這種方式安裝時,Flask希望實例文件夾位於var/myapp-instance
。 (結構不完全相同,但它足以愚弄Flask的檢測功能 。)
您不應該將項目結構與virtualenv結構混合在一起。 將兩者分開:
my_env/
lib/
bin/
my_project/
my_app/
__init__.py
static/
templates/
instance/
“最佳實踐”是將默認配置作為模塊嵌入/分發到應用程序內部。 然后根據環境變量從文件加載配置覆蓋值。 Flask配置處理文檔中對此進行了描述。 我會遵循最佳實踐,而不是依賴目錄名來分隔它們。 我過去所做的就像下面的app.py :
import flask
class Application(flask.Flask):
def __init__(self, name):
super(Application, self).__init__(name)
self.config.from_object('mypackage.config')
self.config.from_envvar('APP_CONFIG', silent=True)
def run(self, *args, **kwargs):
kwargs.setdefault('host', self.config['HOST'])
kwargs.setdefault('port', self.config['PORT'])
kwargs.setdefault('debug', self.config['DEBUG'])
return super(Application, self).run(*args, **kwargs)
app = Application(__name__)
@app.route('/')
def root_handler():
return 'Hi there'
config.py模塊很簡單:
import os
DEBUG = False
TESTING = False
PORT = int(os.environ.get('PORT', '8000'))
HOST = os.environ.get('HOST', '127.0.0.1')
SECRET_KEY = os.urandom(24)
默認情況下,我將環境變量用於許多可配置值,因為應用程序托管提供(例如,heroku)和命令行工具(例如, honcho )將它們設置為有用的值。
我遇到了類似的問題並修改了我當前的工作目錄,使其與項目目錄相同。
Debbuging,我發現由於某種原因,當Flask()。import_name屬性是一個名為'__name__'
的字符串時, instance_path = os.getcwd() + /instance
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.