【问题标题】:Django - cant creat directory in settings.py - Apache2Django - 无法在 settings.py 中创建目录 - Apache2
【发布时间】:2018-10-11 10:06:04
【问题描述】:

我致力于将 Django 网站置于 prod 模式。 我陷入了通过我的 settings.py 创建文件夹的错误权限。

我无法在我的settings.py 中创建目录...为什么? =(

错误日志

(我删除了无用的信息)

 mod_wsgi (pid=440685): Failed to exec Python script file '/PATHMYSITE/wsgi.py'.
 mod_wsgi (pid=440685): Exception occurred processing WSGI script '/PATHMYSITE/wsgi.py'.
 Traceback (most recent call last):
   File "/PATHMYSITE/wsgi.py", line 21, in <module>
     application = get_wsgi_application()
   File "/PATHMYENV/lib64/python3.6/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
     django.setup(set_prefix=False)
   File "/PATHMYENV/lib64/python3.6/site-packages/django/__init__.py", line 19, in setup
     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
   File "/PATHMYENV/lib64/python3.6/site-packages/django/conf/__init__.py", line 56, in __getattr__
     self._setup(name)
   File "/PATHMYENV/lib64/python3.6/site-packages/django/conf/__init__.py", line 43, in _setup
     self._wrapped = Settings(settings_module)
   File "/PATHMYENV/lib64/python3.6/site-packages/django/conf/__init__.py", line 106, in __init__
     mod = importlib.import_module(self.SETTINGS_MODULE)
   File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
     return _bootstrap._gcd_import(name[level:], package, level)
   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
   File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
   File "/PATHMYSITE/MYSITE/__init__.py", line 5, in <module>
      from .settings import DEBUG
   File "/PATHMYSITE/MYSITE/settings.py", line 333, in <module>
      os.mkdir(FILE_UPLOAD_TEMP_DIR)
PermissionError: [Errno 13] Permission denied: '/PATHMYSITE/media/tmp'

Django“settings.py”

#### many things ######

FILE_UPLOAD_TEMP_DIR = os.path.join(MEDIA_ROOT, "tmp")

if not os.path.exists(FILE_UPLOAD_TEMP_DIR):
    os.mkdir(FILE_UPLOAD_TEMP_DIR)

Apache Httpd "django.conf"

LoadModule wsgi_module /PATHMYENV/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

CustomLog logs/MYSITE-access_log common
ErrorLog logs/MYSITE-error_log


#<VirtualHost *:80>


        # ServerName www.DNS.com:80

        WSGIDaemonProcess MYSITE python-home=/PATHMYENV python-path=/PATHMYSITE
        WSGIProcessGroup MYSITE

        WSGIApplicationGroup %{GLOBAL}
        WSGIScriptAlias / /PATHMYSITE/MYSITE/wsgi.py

        Alias /static/ /PATHMYSITE/static/
        <Directory /PATHMYSITE/static>
                Require all granted
        </Directory>

        <Directory /PATHMYSITE>
                Require all granted
        </Directory>

        <Directory /PATHMYSITE/MYSITE>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

#</VirtualHost>

编辑 1 - 权限站点文件夹

[ME@web PATHTOMYPARENTFOLDERSITE]$ ls -Z 
drwxrwxr-x. apache  apache  unconfined_u:object_r:httpd_sys_content_t:s0 MYSITE
drwxr-xr-x. apache  apache  unconfined_u:object_r:httpd_sys_rw_content_t:s0 MYENV

【问题讨论】:

  • 查看哪个用户拥有这些目录。 apache 通常以 apache 用户身份运行。如果你在 root 用户下安装了你的 django 项目,或者除了 apache 之外的任何用户,但文件/目录权限错误,你就会遇到这个问题。

标签: django apache2 centos7


【解决方案1】:

将 docroot 所在目录的所有权更改为运行 apache 的用户。如果您使用“apache2”用户运行 apache,请执行以下操作

# chown -R apache2:apache /PATHMYSITE/MYSITE/

然后重启

# service apache2 restart

【讨论】:

  • 我已经用用户 apache 做到了。 chown -R apache:apache /PATHMYSITE/MYSITE/。对我来说重启这个词是sudo systemctl restart httpd
  • 那是一回事。您正在重新启动 apache。现在 systemctl 用于重启服务。
  • 好的。所以我按照你的建议做了,不是吗?如果您提供了更多信息,请告诉我。
  • 如果关闭 selinux 对您没有任何问题,那么您可以尝试使用此命令使 selinux 进入许可模式吗? # setenforce 许可
  • sudo setenforce Permissive 成功了。感谢您的提示(关闭 SELinux)...现在我被阻止了。当我上传文件时,它不会写入我的目标 tmp 文件夹...
【解决方案2】:

通过Manish R的注释用这个命令行解决:

sudo setenforce Permissive

它会关闭 SELinux。

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2016-03-25
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多