- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序似乎完全能够基于.env
进行配置文件,导入的配置类,并直接定义变量。然而,FLASK_DEBUG
无法根据我定义变量的方式进行更改。
我可能应该注意到,我在 Windows 上使用 Visual Studio Code。有人告诉我,我需要使用 Linux 或除 Windows 之外的任何其他操作系统,我也打算这样做,但现在这不是一个选择,因此,如果能帮助我理解这个功能如何与我所拥有的系统配合使用以及如何导航,我将不胜感激。
配置.py:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class DevelopmentConfig(object):
os.environ['SECRET_KEY'] = b'something'
os.environ['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'app.db')
os.environ['SQLALCHEMY_TRACK_MODIFICATIONS'] = 'False'
os.environ['FLASK_DEBUG'] = '1'
os.environ['DEV_DICT'] = 'dev_config_class_environ_dictionary_activated_and_working'
class ProductionConfig(object):
os.environ['SECRET_KEY'] = os.environ.get('SECRET_KEY')
os.environ['SQLALCHEMY_DATABASE_URI'] = os.environ.get('PRODUCTION_DATABASE_URI')
os.environ['SQLALCHEMY_TRACK_MODIFICATION'] = 'False'
os.environ['FLASK_DEBUG'] = '0'
os.environ['PROD_DICT'] = 'prod_config_class_environ_dictionary_activated_and_working'
init.py:
from flask import Flask
from config import DevelopmentConfig, ProductionConfig
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from dotenv import load_dotenv, find_dotenv
import os
app = Flask(__name__)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
load_dotenv(find_dotenv())
if os.environ.get('FLASK_ENV') == 'development':
print("Environment is development")
app.config.from_object(DevelopmentConfig)
elif os.environ.get('FLASK_ENV') == 'production':
print("Environment is production")
app.config.from_object(ProductionConfig)
print(os.environ.get('TEST_DOTENV')) #This value is stored in .env
print(os.environ.get('DEV_DICT')) #defined in class DevelopmentConfig as os.environ['DEV_DIVT']
print(os.environ.get('PROD_DICT')) #same but in the ProductionConfig class
print(os.environ.get('FLASK_ENV')) #defined differently in both classes and CONFIGS CORRECTLY
print(os.environ.get('FLASK_DEBUG')) #defined differently in both classes and DOES NOT CONFIG CORRECTLY
.env:
FLASK_ENV=development
FLASK_APP=run.py
SECRET_KEY=b'something'
PRODUCTION_DATABASE_URI='something_else'
TEST_DOTENV=config_from_dotenv_is_working #prints correctly to command line, as do other variables defined here
当我运行应用程序时:
(flaskvenv) PS C:\Users\peter\Desktop\Projects\Social Work Site\sw_app> flask run
* Serving Flask app "run.py" (lazy loading)
* Environment: development
* Debug mode: on
* Restarting with stat
c:\...__init__.py:814: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '
c:\...__init__.py:835: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead...
Environment is development #changes correctly if I change it in .env
config_from_dotenv_is_working #further proof .env works fine
dev_config_class_environ_dictionary_activated_and_working #prints regardless of which class gets called
prod_config_class_environ_dictionary_activated_and_working #also prints regardless of which class gets called
development #changes to production properly if I change it in .env
0 #stubbornly stays set to 0 regardless of it being set in config
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
这是奇怪的部分:
当我定义FLASK_DEBUG
时在 .env
文件,命令行在自动输出中正确显示它,例如如* Debug mode: off
或* Debug mode: on
取决于我是否将其设置为 0
或1
分别。
但是当我用 os.environ.get('FLASK_DEBUG')
调用它时,无论我做什么,它都显示为 0。
基于此,我有几个问题。
问题的主要和本质当然是:
FLASK_DEBUG
但其他变量配置正常?我怀疑可能存在某种联系并有助于我理解这一点的其他问题:
Debug mode
是 on
确实os.environ.get('FLASK_DEBUG')
仍然返回0
?我可以通过定义 FLASK_ENV
来解决这个问题在.env
,但我想了解它是如何工作的。事物配置方式的差异让我感到不安,因为我不知道事物如何或为何以它们的方式运行。
提前致谢!
最佳答案
您混淆了配置类和环境变量的概念。
如果您定义两个类并立即在这些定义中设置环境变量,那么它们都将立即运行。不要这样做:
# config.py
import os
class DevelopmentConfig(object):
os.environ['FLASK_DEBUG'] = '1'
class ProductionConfig(object):
os.environ['FLASK_DEBUG'] = '0'
print('FLASK_DEBUG is', os.environ['FLASK_DEBUG'])
运行此代码后,两个类都将设置环境。变量,由于 0 是最后设置的值,因此结果将为 0:
$ python config.py
FLASK_DEBUG is 0
这就是您的 FLASK_DEBUG
始终为 0 的原因。无论设置什么,DevelopmentConfig
和 ProductionConfig
内的所有代码都会运行在您的 .env
文件中。您的问题与 Windows 无关。
除了类之外,您还可以从 .env
文件设置环境变量,包括 FLASK_ENV=development
。这是 Flask 识别的变量,它将打开 Debug模式。这就是 Flask 中打开 Debug模式的原因。
在类中定义值:
class DevelopmentConfig(object):
MY_VARIABLE = 'dev value'
...
class ProductionConfig(object):
MY_VARIABLE = 'prod value'
...
然后在环境变量中设置环境。这可以直接在操作系统中完成,或者如果您愿意,也可以使用 .env 文件:
FLASK_ENV=development
在生产服务器上,您将创建一个不同的 .env 文件:
FLASK_ENV=production
然后在Flask中加载相关类:
from dotenv import load_dotenv, find_dotenv
from flask import Flask
import os
load_dotenv(find_dotenv())
app = Flask(__name__)
config = ProductionConfig() if os.environ.get('FLASK_ENV') == 'production' else DevelopmentConfig()
app.config.from_object(config)
print(app.config['MY_VARIABLE'])
在这种情况下,您甚至不需要设置 FLASK_DEBUG
,因为 Flask 会根据 FLASK_ENV
自动设置它。
您还可以完全放弃配置类,而是从环境变量或配置文件中导入所有值。阅读Flask config guide更多细节。
关于python - 为什么 Flask 不从配置类配置某些环境变量?需要帮助理解配置过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59943414/
我在文档中找不到答案,所以我在这里问。 在 Grails 中,当您创建应用程序时,您会默认获得生产、开发等环境。 如果您想为生产构建 WAR,您可以运行以下任一命令: grails war 或者 gr
我们组织的网站正在迁移到 Sitecore CMS,但我们正在努力以某种方式为开发人员 (4)、设计师 (4)、QA 人员 (3)、作者 (10-15) 和批准者 (4-10) 设置环境在他们可以独立
如何在WinCVS中设置CVSROOT环境变量? 最佳答案 简单的回答是:您不需要。 CVSROOT 环境变量被高估了。 CVS(NT) 只会在确定存储库连接字符串的所有其他方法都已用尽时才使用它。人
我最近完成了“learnyouahaskell”一书,现在我想通过构建 yesod 应用程序来应用我所学到的知识。 但是我不确定如何开始。 关于如何设置 yesod 项目似乎有两个选项。一是Stack
在这一章中,我们将讨论创建 C# 编程所需的工具。我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨论运行 C# 程序的可用工具之前,让我们先了解一下 C#
运行Ruby 代码需要配置 Ruby 编程语言的环境。本章我们会学习到如何在各个平台上配置安装 Ruby 环境。 各个平台上安装 Ruby 环境 Linux/Unix 上的 Ruby 安装
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个这样的计算(请注意,这只是非常简化的、缩减版的、最小的可重现示例!): computation <- function() # simplified version! { # a lo
我使用环境作为哈希表。键是来自常规文本文档的单词,值是单个整数(某个其他结构的索引)。 当我加载数百万个元素时,更新和查找都变慢了。下面是一些代码来显示行为。 看起来从一开始的行为在 O(n) 中比在
我正在构建一个 R 包并使用 data-raw和 data存储预定义的库 RxODE楷模。这非常有效。 然而,由此产生的.rda文件每代都在变化。某些模型包含 R 环境,并且序列化似乎包含“创建时间”
(不确定问题是否属于这里,所以道歉是为了) 我很喜欢 Sublime Text ,我经常发现 Xcode 缺少一些文本/数据处理的东西。我可能有不止一个问题—— 'Command +/' 注释代码但没
我正在使用 SF2,并且创建了一些有助于项目调试的路由: widget_debug_page: path: /debug/widget/{widgetName} defau
我创建了一个名为 MyDjangoEnv 的 conda 环境。当我尝试使用 source activate MyDjangoEnv 激活它时,出现错误: No such file or direct
有没有办法区分从本地机器运行的包和从 Cordova 应用商店安装的包? 例如,我想像这样设置一个名为“evn”的 JavaScript 变量: if(cordovaLocal){ env = 'de
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我的任务是使用 java 和 mysql 开发一个交互式网站:使用 servlet 检索和处理数据,applet 对数据客户端进行特殊处理,并处理客户端对不同数据 View 的请求。 对于使用 jav
这按预期工作: [dgorur@ted ~]$ env -i env [dgorur@ted ~]$ 这样做: [dgorur@ted ~]$ env -i which date which: no
我想进行非常快速的搜索,看来使用哈希(通过环境)是最好的方法。现在,我得到了一个在环境中运行的示例,但它没有返回我需要的内容。 这是一个例子: a system.time(benchEnv(), g
我想开始开发 OpenACC 程序,我有几个问题要问:是否可以在 AMD gpu 上执行 OpenACC 代码? 如果是这样,我正在寻找适用于 Windows 环境的编译器。我花了将近一个小时什么也没
这可能看起来很奇怪,但是有没有办法制作机器(linux/unix 风格 - 最好是 RHEL)。我需要控制机器的速度以确保代码在非常慢的系统上工作并确定正确的断点(在时间方面)。 我能做到的一种方法是
我是一名优秀的程序员,十分优秀!