我正在尝试将我的django应用程序部署在这个DigitalOcean后面的液滴虚拟机( 指南 )中。
为此,我成功地使用了nginx和gunicorn。
我面临的问题是使用django-select2 2,并且表单的小部件总是显示“结果无法找到”。提供404错误,而在我的本地环境中,它工作完美!
我尝试过实现缓存(希望它能解决这个问题),但是事情变得更糟了,因为启用缓存之后,小部件似乎不再工作了,即使在本地也是如此。
现在到目前为止展示我的代码的时候了:
settings.py:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
},
'select2': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'TIMEOUT': 60 * 60 * 24,
},
}
SELECT2_CACHE_BACKEND = 'select2'这是按照指南显示的http://django-select2.readthedocs.io/en/latest/django_select2.html#module-django_select2.cache完成的代码
PS:注意使用redis而不是memcached可以得到相同的结果。
这是我的nginx配置:
server {
listen 80;
server_name 46.101.134.225;
client_max_body_size 2M;
location = /favicon.ico { access_log off; log_not_found off; }
location /static {
root /projectname;
}
location /media {
root /projectname/staticfiles;
}
location /assets {
root /;
}
location / {
include proxy_params;
proxy_pass http://unix:/projectname/projectname.sock;
}
}这是我的美眉配置:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/projectname
ExecStart=/projectname/bin/gunicorn --access-logfile - --workers 3 --bind unix:/projectname/projectname.sock projectname.wsgi:application
[Install]
WantedBy=multi-user.target这是我的小部件表单:
from django_select2.forms import ModelSelect2Widget, ModelSelect2MultipleWidget
...
class CompanyForm(BaseModeratedObjectForm):
...
city = forms.ModelChoiceField(widget=ModelSelect2Widget(
model=City, search_fields=['name__istartswith']
), queryset=City.objects.all(), required=False)
...
treatments = forms.ModelMultipleChoiceField(widget=ModelSelect2MultipleWidget(
model=Treatment, search_fields=['name__icontains']
), queryset=Treatment.objects.all(), required=False)
...PS:注意,在实现缓存之前,我获得了以下结果:
在实现缓存之后,什么都不起作用了(在我的本地环境中,手动导航到select2 url,我可以看到它显示错误field_id未找到)。
编辑:
由于我的答案甚至在github上的django-select2repo中也被接受了,我已经对这个项目做了一个拉请求,修改了文档来通知这个案例!
发布于 2018-01-29 13:39:57
我终于设法解决了这个问题,问题是,在实现redis缓存时,系统无法找到redis服务器。使用sudo apt-get install redis-server安装它解决了这个问题,同时使用了redis缓存!
发布于 2020-01-27 15:24:24
也安装了redis,但解决方案可能是settings.py中的超时设置。不过不太确定
https://stackoverflow.com/questions/48460757
复制相似问题