【发布时间】:2022-01-23 09:23:35
【问题描述】:
所以我使用 5 美元的数字海洋水滴,使用 ubuntu 和 nginix 来托管一个 django 网站,我遵循了这个 this 教程和 this 指南。因此,指南的一部分说从虚拟环境运行gunicorn --bind 0.0.0.0:8000 myproject.wsgi,它起作用了,作为测试,我创建了一个高亮对象以查看它是否会显示,它确实显示了,这就是它的样子:
编辑 3:服务文件
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=apple
Group=www-data
WorkingDirectory=/home/apple/sanskar_handicrafts
ExecStart=/home/apple/sanskar_handicrafts/env/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
sanskar_handicrafts.wsgi:application
[Install]
WantedBy=multi-user.target
之后我添加了一个 gunicorn 套接字并完成了这篇文章,直到它告诉我运行 sudo ufw allow 'Nginx Full',但是在我运行它之后,首先,管理页面的 css 消失了,但更大的问题是在我从管理面板添加了一些额外的对象之后,我的views.py 似乎没有注意到这些变化,因为当我显示Highlights.objects.all() 的内容时,它只显示了上面的那个。但管理页面确实显示对象已成功添加。此外,github repo 的媒体文件夹中没有显示任何新图像,包括从gunicorn --bind 0.0.0.0:8000 myproject.wsgi 上传的图像,它们只有我在本地开发时上传的图像
但是,当我从运行 nginix 的虚拟环境中 ls 进入媒体文件夹时,它包含了我在本地上传的图像中的所有媒体文件以及所有新文件。
我有 2 个模型,这个问题似乎对他们来说都很普遍,我已经尝试过迁移,重新启动 ngnix 服务器,以及拉和推到 github,到目前为止都没有工作。 此外,新图片似乎确实存在于所需的网址中
这是我的models.py:
from django.db import models
class Highlights(models.Model):
img = models.ImageField(upload_to='highlights/')
class Gallery(models.Model):
img = models.ImageField()
这是我的views.py:
from django.shortcuts import render,get_object_or_404
from django.core.mail import send_mail
from .models import Gallery,Highlights
h_images = Highlights.objects.all()
g_images = Gallery.objects.all()
cnt = 1
rows = []
row = []
# Dividing the images into rows of 3 images per row as the maximum and creating a list of those rows
for image in g_images:
if cnt < 3:
row.append(image)
else:
row.append(image)
cnt = 0
rows.append(row)
row = []
cnt += 1
if row:
rows.append(row)
# Seperating the rows into multiple pages to insure faster loading and better optimization
max_rows_per_page = 1
home_page = rows[:max_rows_per_page]
divided_rows_list = []
first = max_rows_per_page
last = max_rows_per_page + max_rows_per_page
curr_page = 1
for i in range(max_rows_per_page, len(rows), max_rows_per_page):
divided_rows_list.append(rows[first:last])
first = last
last += max_rows_per_page
def home(request):
return render(request, 'index.html',{'images':h_images})
def gallery(request):
return render(request, 'gallery.html', {'rows':home_page,'nxt':1,'prev':len(divided_rows_list)})
# return render(request,'gallery.html',{'rows':rows})
def nxt_pg(request,num):
if num > len(divided_rows_list) or num == 0:
return gallery(request)
elif num < 0:
num = len(divided_rows_list)
return render(request, 'gallery.html', {'rows': divided_rows_list[num - 1], 'nxt': num + 1, 'prev': num - 1})
编辑:
所以 Ankit 告诉我问题是因为我没有运行 collect static 但我已经这样做了,这就是我的 settings.py 的静态部分的样子:
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'),
]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
这是我运行sudo nano /etc/nginx/sites-available/myproject时得到的结果
已编辑:
server {
listen 80;
server_name 139.59.20.1;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /home/apple/sanskar_handicrafts/staticfiles;
}
location /media/ {
root /home/apple/sanskar_handicrafts;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
我也有一个 static_root 文件夹,当我现在尝试使用 collectstatic 时会发生这种情况:
所以我不认为 collectstatic 有问题。
【问题讨论】:
-
@AnkitTiwari 这样做,即使我网站的 css 和 javascript 也被删除了,也没有解决问题
-
您将静态文件目录命名为
staticfiles,但在 nginx 配置中它仍被用作static。将root /home/apple/sanskar_handicrafts;替换为alias /home/apple/sanskar_handicrafts/staticfiles;重启nginx服务器,静态文件问题应该就没有了。 (root指令 appends 也是位置部分。) -
能否包含整个 nginx 配置?其中一半丢失了。
-
对不起,没有工作,Highlights.objects.all() 仍然显示
]> 尽管管理页面中有 2 个其他人 -
您的问题包含多个问题,nginx配置是第一个,我的建议应该解决静态文件问题。我正在调查查询问题。
标签: python django django-models django-views digital-ocean