在生产模式下在Flask中启用调试模式

时间:2018-10-02 08:33:32

标签: python flask

在瓶子中启用调试模式所需要做的就是:

   at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
   at TicketSystemDb.DTO.Helper.DTOHelper.ConvertRelations(Object origin, Object to) in C:\TicketSystem\TicketSystemDb\DTO\Helper\DTOHelper.cs:line 90
   at TicketSystemDb.DTO.Helper.DTOHelper.SimplifyResult(Object from, Object to) in C:\TicketSystem\TicketSystemDb\DTO\Helper\DTOHelper.cs:line 61
   at TicketSystemDb.REPO.TicketREPO.GetTickets() in C:\TicketSystem\TicketSystemDb\REPO\TicketREPO.cs:line 35
   at TicketSystemDb.UOW.TicketUOW.GetTickets() in C:\TicketSystem\TicketSystemDb\UOW\TicketUOW.cs:line 21
   at TicketSystemAPI.Controllers.TicketController.Get() in C:\TicketSystem\TicketSystemAPI\Controllers\TicketController.cs:line 22
   at lambda_method(Closure , Object , Object[] )
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_1.<GetExecutor>b__3(Object instance, Object[] methodParameters)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)

我如何在Flask框架中做同样的事情?

6 个答案:

答案 0 :(得分:2)

要启用调试模式,我将以下代码添加到flask应用程序:

app.config['ENV'] = 'development'
app.config['DEBUG'] = True
app.config['TESTING'] = True

我还将建议为环境设置环境变量并进行调试。

$ export FLASK_ENV=development 
$ export FLASK_DEBUG=1

答案 1 :(得分:1)

如果您处于开发环境中;您只需在Flask.run中将其指定为here

示例:

app.run(host='0.0.0.0', port='8080', debug=True)

您也可以采用另一种方法来修改default_config,如图here所示。

示例:

app.config['DEBUG'] = True
app.run(host='0.0.0.0', port='8080')

甚至导出FLASK_DEBUG=1-请记住,FLASK_DEBUG会覆盖FLASK_ENV=development

如下所示,Flask表示以下内容:

  

在生产环境中部署时,请勿启用调试模式。

尽管您已经说过,您希望在生产中启用调试功能;因此,为什么我不使用Flask.run,因为它打算在开发环境中使用,所以我当然不会将FLASK_ENV设置为development

我建议您重新考虑生产调试的概念,因为生产并不意味着调试。简而言之,我相信您想在生产环境中进行调试的理由是错误的。

另一种可能的解决方案是使用以下(分叉,多进程):

from werkzeug.debug import DebuggedApplication  
application = DebuggedApplication(app, True)

答案 2 :(得分:1)

使用Flask 1.0版,您可以将环境变量设置为在运行flask命令时自动导入,但是您需要安装python-dotenv

然后,您可以在顶级目录.flaskenv中创建一个新文件,并在其中设置环境变量:

FLASK_APP=run.py
FLASK_DEBUG=1

答案 3 :(得分:1)

如果有人在Windows中遇到相同的问题,请跟踪Gil Sousa'S答案

在文件的代码中添加这三行,

app.config['ENV'] = 'development'
app.config['DEBUG'] = True
app.config['TESTING'] = True

cmd或您的anaconda prompt中,键入以下命令以设置调试模式,

$ set FLASK_ENV=development 
$ set FLASK_DEBUG=1

并且不要忘记在debug=True内部传递app.run()作为参数。

PS:如果您遵循的答案是FYKI,那么烧瓶应用程序现在正在使用命令$set FLASK_APP=app.py,然后使用$FLASK run运行烧瓶应用程序。这仅适用于使用export而不是set的Linux Windows。

答案 4 :(得分:0)

http://flask.pocoo.org/docs/1.0/quickstart/#debug-mode

在文档中:

要启用所有开发功能(包括调试模式),可以在运行服务器之前导出FLASK_ENV环境变量并将其设置为开发:

$ export FLASK_ENV=development
$ flask run

(在Windows上,您需要使用set而不是export。)

这将执行以下操作:

它激活调试器 它激活自动重新加载器 它在Flask应用程序上启用调试模式。

答案 5 :(得分:0)

在flask库中,您可以使用以下步骤启用内置调试模式。

第 1 步:在您的项目文件中创建一个虚拟环境(最佳实践):

python -m venv webserver

或者,使用 python3

python3 -m venv webserver

其中网络服务器表示虚拟环境的位置,文件夹将被保存为“网络服务器”。

最佳做法是使用文件夹名称作为“venv”。

第 2 步:使用 Windows Powershell,导航到您的项目文件夹

cd "location of the project folder"

第三步:设置flask app变量以指定python脚本名称:

$env:FLASK_APP="server.py"

第四步:设置flask环境变量,指定环境类型为“development”,激活调试器:

$env:FLASK_ENV="development"

第五步:激活项目的虚拟环境:

venv\scripts\activate

第 6 步:运行 Flask 应用程序:

flask run