【问题标题】:Apache2 + wsgi + mysql not working but from Django it's workingApache2 + wsgi + mysql 不工作,但从 Django 它工作
【发布时间】:2021-09-14 19:27:49
【问题描述】:

我已经更新了我的服务器,现在我在 Django 下的网站出现了问题。

ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: cannot allocate memory in static TLS block
...

[Sat Jul 03 00:50:56.975729 2021] [wsgi:error] [pid 5009] [client 93.21.219.190:57598]   File "Django-2.1/django/db/backends/mysql/base.py", line 15, in <module>
[Sat Jul 03 00:50:56.975744 2021] [wsgi:error] [pid 5009] [client 93.21.219.190:57598]     import MySQLdb as Database
[Sat Jul 03 00:50:56.975766 2021] [wsgi:error] [pid 5009] [client 93.21.219.190:57598]   File "/usr/local/lib/python3.8/dist-packages/MySQLdb/__init__.py", line 24, in <module>
[Sat Jul 03 00:50:56.975805 2021] [wsgi:error] [pid 5009] [client 93.21.219.190:57598]     version_info, _mysql.version_info, _mysql.__file__
[Sat Jul 03 00:50:56.975850 2021] [wsgi:error] [pid 5009] [client 93.21.219.190:57598] NameError: name '_mysql' is not defined

我找到了一些解决方案,但没有任何效果。

我已经重新安装了 mod_wsgi 和 mysqlclient :

pip3 install mod_wsgi
pip3 install mysqlclient

wsgi 链接到 libpython3.8 和 _mysql.cpython-38-x86_64-linux-gnu.sois 链接到

ldd /usr/lib/apache2/modules/mod_wsgi.so 
    linux-vdso.so.1 (0x00007ffff394b000)
    libpython3.8.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0 (0x00007f6a1fa15000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6a1f9f3000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6a1f82e000)
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f6a1f7ff000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f6a1f7e2000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f6a1f7a7000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6a1f79f000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f6a1f79a000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6a1f656000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6a1ffc9000)


ldd  /usr/local/lib/python3.8/dist-packages/MySQLdb/_mysql.cpython-38-x86_64-linux-gnu.so
    linux-vdso.so.1 (0x00007ffccf18f000)
    libmysqlclient.so.21 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.21 (0x00007efe00610000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efe0044b000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efe00429000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007efe00423000)
    libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007efe00391000)
    libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007efe000a5000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007efe00089000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007efe0007e000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007efdffeb1000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efdffd6d000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007efdffd53000)
    /lib64/ld-linux-x86-64.so.2 (0x00007efe00d2c000)

ls /usr/lib/x86_64-linux-gnu/libmysqlclient.so.21
/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21

ls -l /usr/bin/python3
lrwxrwxrwx 1 root root 18 juil.  2 23:19 /usr/bin/python3 -> /usr/bin/python3.8

如果我运行 django shell,我可以导入 mysqldb:

python3 manage.py shell
import MySQLdb as Database
Here I can query the database with Model.objects.filter(...)

总结:从 django shell 可以正常工作,从 apache2 不能正常工作。我不明白发生了什么:/

【问题讨论】:

    标签: mysql apache2 mod-wsgi


    【解决方案1】:

    我在 Docker 容器中运行的 Apache Airflow 遇到了类似的问题。

    添加 LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 作为环境变量为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 2018-11-10
      • 2015-06-15
      • 2013-10-20
      • 1970-01-01
      • 2012-04-12
      • 2014-12-31
      • 1970-01-01
      相关资源
      最近更新 更多