【问题标题】:Django-select2 throwing 'Results cannot be loaded.'Django-select2 抛出“无法加载结果。”
【发布时间】:2018-07-05 18:11:09
【问题描述】:

我正在尝试按照guide 在 Droplet 虚拟机 (DigitalOcean) 中部署我的 django 应用程序。

为此,我成功地使用了 nginx 和 gunicorn。

我面临的问题是django-select2,并且表单的小部件总是显示“找不到结果”。给出 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'

这是按照here显示的指南完成的代码

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;
    }
}

这是我的 gunicorn 配置:

[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 not found

编辑:

由于即使在 github 上的 django-select2 存储库中也接受了我的回答,我已经对项目进行了拉取请求,更改了文档以通知此案例!

【问题讨论】:

    标签: django nginx gunicorn django-cache django-select-related


    【解决方案1】:

    我终于设法解决了这个问题,问题是在实现redis缓存时,系统无法找到redis服务器。使用sudo apt-get install redis-server安装它解决了这个问题,同时使用了redis缓存!

    【讨论】:

    • 您的配置仍然指向 Memcached,所以...您是否将其更改为 Redis?
    • 是的,我将其更改为 redis,redis 无法正常工作,因为我没有像我的答案那样安装它
    【解决方案2】:

    也安装了redis,但解决方案可能是settings.py中的TIMEOUT设置。不过不确定

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 2019-08-10
      相关资源
      最近更新 更多