Ada*_*ter 5 apache django python-3.x
我缺少什么?这是我第一次尝试使用 Django。Django 中内置的服务器可以在本地很好地提供该文件,但我无法让 Apache 执行相同的操作。以下是我在一个全新的、干净的 Linux 2 实例上所做的事情。
\nsudo yum update\nsudo yum install -y python3\nsudo yum install httpd-devel\nsudo yum install -y mod_wsgi\ncd /etc/httpd/modules (verify that mod_wsgi is there)\ncd /var/www/\nsudo mkdir myApp\nsudo chown ec2-user myApp\ncd myApp\nsudo pip3 install virtualenv\nvirtualenv myprojectenv\nsource myprojectenv/bin/activate\nsudo pip3 install django==2.1.1\ndjango-admin startproject myApp\ncd myApp\npython manage.py migrate\npython manage.py runserver\nwget http://127.0.0.1:8000/ (works correctly as it should and I receive test page)\npython manage.py startapp hello\ncd myApp\nvim settings.py\nRun Code Online (Sandbox Code Playgroud)\nsettings.py:编辑此部分,如下所示:
\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'hello.apps.HelloConfig',\n]\nRun Code Online (Sandbox Code Playgroud)\n。
\nvim urls.py\nRun Code Online (Sandbox Code Playgroud)\nurls.py:整个文件如下所示:
\nfrom django.contrib import admin\nfrom django.urls import path, include\n\nurlpatterns = [\n path('admin/', admin.site.urls),\n path('', include('hello.urls')),\n]\nRun Code Online (Sandbox Code Playgroud)\n。
\ncd ..\ncd hello\nvim views.py\nRun Code Online (Sandbox Code Playgroud)\nviews.py:整个文件看起来像这样
\nfrom django.shortcuts import render\n# Create your views here.\n\n# hello/views.py\nfrom django.http import HttpResponse\ndef homePageView(request):\nreturn HttpResponse('Hello, World!')\nRun Code Online (Sandbox Code Playgroud)\n。
\nvim urls.py\nRun Code Online (Sandbox Code Playgroud)\nhello/urls.py:整个文件如下所示:
\n# hello/urls.py\nfrom django.urls import path\nfrom .views import homePageView\n\nurlpatterns = [\n path('', homePageView, name='home')\n]\nRun Code Online (Sandbox Code Playgroud)\n。
\ncd ..\npython manage.py runserver\nwget http://127.0.0.1:8000/ (works correctly as it should, now gets \xe2\x80\x9cHello World!\xe2\x80\x9d)\nRun Code Online (Sandbox Code Playgroud)\n现在来说说 Apache 部分:
\nsudo vim /etc/httpd/conf/httpd.conf\n \nRun Code Online (Sandbox Code Playgroud)\n将以下内容粘贴到 httpd.conf 的底部:
\nWSGIScriptAlias / /var/www/myApp/myApp/myApp/wsgi.py\nWSGIPythonHome /var/www/myApp/myprojectenv\nWSGIPythonPath /var/www/myApp\n\n<Directory /var/www/myApp/myApp/myApp>\n<Files wsgi.py>\nRequire all granted\n</Files>\n</Directory>\nRun Code Online (Sandbox Code Playgroud)\n。
\nsudo service httpd restart\nwget http://127.0.0.1\nRun Code Online (Sandbox Code Playgroud)\n正在连接到 127.0.0.1:80...已连接。\nHTTP 请求已发送,正在等待响应...
\n这就是它所做的一切,直到超时。通过浏览器连接到公共IP地址也可以做同样的事情;它连接并只是坐在那里等待响应。
\nApache 错误日志 (/var/log/httpd/error_log) 如下所示:
\nDjango ImportError: No module named site\nRun Code Online (Sandbox Code Playgroud)\n快速搜索表明这是因为 mod_wsgi 使用的 python 版本与我的虚拟环境不同。我使用的是python3.7
\ncd /etc/httpd/modules\nldd mod_wsgi.so\nRun Code Online (Sandbox Code Playgroud)\n输出
\n linux-vdso.so.1 (0x00007ffd7dec3000)\n libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007fe35815d000)\n libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe357f3f000)\n libdl.so.2 => /lib64/libdl.so.2 (0x00007fe357d3b000)\n libutil.so.1 => /lib64/libutil.so.1 (0x00007fe357b38000)\n libm.so.6 => /lib64/libm.so.6 (0x00007fe3577f8000)\n libc.so.6 => /lib64/libc.so.6 (0x00007fe35744d000)\n /lib64/ld-linux-x86-64.so.2 (0x00007fe358755000)\nRun Code Online (Sandbox Code Playgroud)\n显然这是一个不同的版本。我已经卸载了它,并在python3.7虚拟环境中重新安装了它,但结果是一样的。它仍然显示“libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0”。
\n最终,这里的问题是让 Python 使用正确/新版本的 sqlite3。事实证明,位于 /var/log/httpd/error_log 的错误日志对于故障排除非常有用(令人惊讶)。
\n在搜索其他问答时,我发现了很多涉及 LD_LIBRARY_PATH 和 LD_RUN_PATH 的答案。然而,通过更深入的研究,我发现这些并不是指示编译器了解库路径的首选方法。如下所示,改为使用 ldconfig,以及放置在 /etc/ld.so.conf.d/ 目录中的 .conf 文件。
\n以下是获取 Apache 提供的最新 Django 的分步说明;从新的 Linux 2 EC2 实例开始。
\nsudo yum update\nsudo su\nyum groupinstall "Development Tools"\ncrtl-d\nsudo yum -y install libffi-devel\nsudo yum install -y openssl-devel\nsudo vim /etc/ld.so.conf.d/usrlocal.conf\nRun Code Online (Sandbox Code Playgroud)\n在您创建的这个空文件中,添加:
\n/usr/local/lib\n/usr/local/lib64\nRun Code Online (Sandbox Code Playgroud)\n下一个:
\nsudo ldconfig -v\ncd ~\nmkdir downloads\ncd downloads\nwget https://sqlite.org/2020/sqlite-autoconf-3320300.tar.gz\ntar -xvf sqlite-autoconf-3320300.tar.gz\ncd sqlite-autoconf-3320300\n./configure --prefix=/usr/local\nmake -L\nsudo make install\nsudo ldconfig -v\ncd ~downloads\nwget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz\ntar -xvf Python-3.7.7.tgz\ncd Python-3.7.7\n./configure --enable-shared --enable-optimizations --with-threads --enable-loadable-sqlite-extensions --with-openssl=/usr/local/lib64\nsudo make -L\nsudo make altinstall (altinstall keeps old 2.7 version)\nsudo ldconfig -v\npython 3.7 (to verify installation ctrl-d to quit)\n>>>import sqlite3\n>>> sqlite3.sqlite_version\nctrl-d\nsudo chown -R ec2-user /usr/local/lib/python3.7\nsudo chown ec2-user /usr/local/bin\nsudo chown ec2-user /usr/local/lib\nsudo yum install httpd-devel\nsudo ldconfig -v\ncd /var/www/\nsudo mkdir django\nsudo chown ec2-user django\ncd django\npip3.7 install virtualenv\nvirtualenv myprojectenv\nsource myprojectenv/bin/activate\npython -c 'import sys; print(sys.prefix)'\npip3.7 install mod_wsgi \nmod_wsgi-express module-config\nRun Code Online (Sandbox Code Playgroud)\n这将输出类似下面的内容。您将复制该内容并将其粘贴到 httpd.conf 文件的底部。sudo vim /etc/httpd/conf/httpd.conf
\nLoadModule wsgi_module "/var/www/django/myprojectenv/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so"\nWSGIPythonHome "/var/www/django/myprojectenv"\nRun Code Online (Sandbox Code Playgroud)\n下一个:
\npip3.7 install Django==3.0.7\ndjango-admin startproject myApp\ncd myApp\npython manage.py migrate\npython manage.py startapp hello\ncd myApp\nvim wsgi.py\nRun Code Online (Sandbox Code Playgroud)\n编辑为如下所示(添加 \xe2\x80\x98import sys\xe2\x80\x99 和 \xe2\x80\x98sys.path\xe2\x80\xa6\xe2\x80\xa6.\xe2\x80\x99)
\nimport os\nimport sys\nfrom django.core.wsgi import get_wsgi_application\n\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myApp.settings')\nsys.path.append('/var/www/myApp/myApp/myApp')\nsys.path.append('/var/www/myApp/myApp')\n\napplication = get_wsgi_application()\nRun Code Online (Sandbox Code Playgroud)\n下一个:
\nvim settings.py\nRun Code Online (Sandbox Code Playgroud)\n编辑如下所示,替换您的 EC2 实例公共 IP
\n ALLOWED_HOSTS = ['xx.xxx.xx.xxx'] (substitute your EC2 public IP address)\n\n INSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'hello.apps',\n ]\n\n\nvim urls.py\nfrom django.contrib import admin\nfrom django.urls import path, include\n\nurlpatterns = [\n path('admin/', admin.site.urls),\n path('', include('hello.urls')),\n]\nRun Code Online (Sandbox Code Playgroud)\n下一个:
\ncd ../hello\nvim views.py\nRun Code Online (Sandbox Code Playgroud)\n编辑如下所示。这些是 Python 文件。所以,请注意你的缩进
\nfrom django.shortcuts import render\n# Create your views here.\n\n# hello/views.py\nfrom django.http import HttpResponse\ndef homePageView(request):\n return HttpResponse('Hello, World!')\nRun Code Online (Sandbox Code Playgroud)\n您将创建下一个文件。
\nvim urls.py\nRun Code Online (Sandbox Code Playgroud)\n粘贴:
\n# hello/urls.py\nfrom django.urls import path\nfrom .views import homePageView\n\nurlpatterns = [\n path('', homePageView, name='home')\n]\nRun Code Online (Sandbox Code Playgroud)\n现在回到阿帕奇:
\nsudo vim /etc/httpd/conf/httpd.conf\n \nRun Code Online (Sandbox Code Playgroud)\n将以下内容粘贴到 httpd.conf 的底部:
\nWSGIScriptAlias / /var/www/django/myApp/myApp/wsgi.py\nWSGIPythonPath /var/www/django\n\n<Directory /var/www/django/myApp/myApp>\n<Files wsgi.py>\nRequire all granted\n</Files>\n</Directory>\nRun Code Online (Sandbox Code Playgroud)\n。
\nsudo service httpd start\nRun Code Online (Sandbox Code Playgroud)\n此时,您应该能够向实例的公共 IP 发出请求并获得 \xe2\x80\x9cHello World!\xe2\x80\x9d 响应。
\n最后:
\nsudo su\nvim /var/log/httpd/error_log\nRun Code Online (Sandbox Code Playgroud)\n和中提琴,你有一些新问题需要解决!
\n| 归档时间: |
|
| 查看次数: |
4361 次 |
| 最近记录: |