最终,这里的问题是让 Python 使用正确/新版本的 sqlite3。事实证明,位于 /var/log/httpd/error_log 的错误日志对于故障排除非常有用(令人惊讶)。
在搜索其他问答时,我发现了很多涉及 LD_LIBRARY_PATH 和 LD_RUN_PATH 的答案。然而,通过更深入的研究,我发现这些并不是指示编译器了解库路径的首选方法。如下所示,改为使用 ldconfig,以及放置在 /etc/ld.so.conf.d/ 目录中的 .conf 文件。
以下是获取 Apache 提供的最新 Django 的分步说明;从新的 Linux 2 EC2 实例开始。
sudo yum update
sudo su
yum groupinstall "Development Tools"
crtl-d
sudo yum -y install libffi-devel
sudo yum install -y openssl-devel
sudo vim /etc/ld.so.conf.d/usrlocal.conf
在您创建的这个空文件中,添加:
/usr/local/lib
/usr/local/lib64
next:
sudo ldconfig -v
cd ~
mkdir downloads
cd downloads
wget https://sqlite.org/2020/sqlite-autoconf-3320300.tar.gz
tar -xvf sqlite-autoconf-3320300.tar.gz
cd sqlite-autoconf-3320300
./configure --prefix=/usr/local
make -L
sudo make install
sudo ldconfig -v
cd ~downloads
wget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tgz
tar -xvf Python-3.7.7.tgz
cd Python-3.7.7
./configure --enable-shared --enable-optimizations --with-threads --enable-loadable-sqlite-extensions --with-openssl=/usr/local/lib64
sudo make -L
sudo make altinstall (altinstall keeps old 2.7 version)
sudo ldconfig -v
python 3.7 (to verify installation ctrl-d to quit)
>>>import sqlite3
>>> sqlite3.sqlite_version
ctrl-d
sudo chown -R ec2-user /usr/local/lib/python3.7
sudo chown ec2-user /usr/local/bin
sudo chown ec2-user /usr/local/lib
sudo yum install httpd-devel
sudo ldconfig -v
cd /var/www/
sudo mkdir django
sudo chown ec2-user django
cd django
pip3.7 install virtualenv
virtualenv myprojectenv
source myprojectenv/bin/activate
python -c 'import sys; print(sys.prefix)'
pip3.7 install mod_wsgi
mod_wsgi-express module-config
这将输出类似下面的内容。您将复制该内容并将其粘贴到 httpd.conf 文件的底部。 sudo vim /etc/httpd/conf/httpd.conf
LoadModule wsgi_module "/var/www/django/myprojectenv/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so"
WSGIPythonHome "/var/www/django/myprojectenv"
next:
pip3.7 install Django==3.0.7
django-admin startproject myApp
cd myApp
python manage.py migrate
python manage.py startapp hello
cd myApp
vim wsgi.py
编辑如下(添加“import sys”和“sys.path…….”)
import os
import sys
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myApp.settings')
sys.path.append('/var/www/myApp/myApp/myApp')
sys.path.append('/var/www/myApp/myApp')
application = get_wsgi_application()
next:
vim settings.py
编辑如下所示,替换您的 EC2 实例公共 IP
ALLOWED_HOSTS = ['xx.xxx.xx.xxx'] (substitute your EC2 public IP address)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello.apps',
]
vim urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('hello.urls')),
]
next:
cd ../hello
vim views.py
编辑如下所示。这些是 Python 文件。所以,请注意你的缩进
from django.shortcuts import render
# Create your views here.
# hello/views.py
from django.http import HttpResponse
def homePageView(request):
return HttpResponse('Hello, World!')
您将创建下一个文件。
vim urls.py
Paste:
# hello/urls.py
from django.urls import path
from .views import homePageView
urlpatterns = [
path('', homePageView, name='home')
]
现在回到阿帕奇:
sudo vim /etc/httpd/conf/httpd.conf
将以下内容粘贴到 httpd.conf 的底部:
WSGIScriptAlias / /var/www/django/myApp/myApp/wsgi.py
WSGIPythonPath /var/www/django
<Directory /var/www/django/myApp/myApp>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
.
sudo service httpd start
此时,您应该能够向实例的公共 IP 发出请求并获得“Hello World!”回复。
Finally:
sudo su
vim /var/log/httpd/error_log
和中提琴,你有一些新问题需要解决!