【问题标题】:deploying django site (wsgi)部署 django 站点(wsgi)
【发布时间】:2013-01-04 10:19:20
【问题描述】:

尝试使用 2 个不同的设置文件进行生产和开发。

我设置 DJANGO_SETTINGS_MODULE='mysite.settings_production'
在使用runserver 运行服务器时完美运行

当我使用 apache 运行它时,apache 似乎没有使用 ~/.bash_profile 中的设置,而是使用 wsgi.py 文件中的 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

我想这可能是因为 apache 在不同的用户上运行,而不是我的.. 好的..所以它似乎在我的 ec2 ubuntu 上作为 www-data 运行。

所以我必须创建 /home/www-data/.bash_profile 并设置环境变量?

使用不同的设置文件似乎很麻烦。
有没有明显更简单的方法来做到这一点? (我不想更改 wsgi.py 文件,因为它是源代码控制的)

【问题讨论】:

    标签: django deployment mod-wsgi


    【解决方案1】:

    使用 bash_profile 是完全错误的方法。

    正确的方法是使用wsgi.py文件。但是,由于您不想这样做(尽管我不明白版本控制与任何事情有什么关系),因此您可以使用 SetEnv 直接在 Apache 配置中设置环境变量:

    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    

    【讨论】:

    • 我可以在 httpd.conf 中做到这一点吗? (我想在我的开发计算机中使用 settings.py,在生产计算机中使用 settings_production.py。由于 wsgi.py 是由 git 或 svn 控制的,它会影响两个部署)
    • mod_wsgi 文档特别提到 SetEnv 对被调用脚本的系统环境没有影响
    【解决方案2】:

    嗯,这真的是错误的方式。对不同环境进行单独设置的常用方法是将环境相关存储在 local_settings.py (或您命名的任何名称)中并从 settings.py 中导入

    from local_settings.py import *
    

    不要将 local_settings.py 放在项目存储库下,因为您将在每次提交时覆盖它。如果您想保留本地设置的样本,请将其放入单独的文件中,例如local_settings.py.example

    您可以在 settings.py 的开头导入本地设置(因此 settings.py 设置将覆盖本地设置),也可以在最后导入本地设置,或者在这两种情况下都有两个本地设置文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多