• Как разместить на странице инлайны инлайнов?

    @AntonIgin Автор вопроса
    javedimka: установил в окружении, добавил приложение в settings.py и ссылку в урл, а все равно ссылка не работает.

    pip install django-nested-admin
    В settings.py, в INSTALLED_APPS:
    'nested_admin',

    В urls.py:
    url(r'^nested_admin/', include('nested_admin.urls'))

    Что еще нужно сделать? Пользуюсь Python 3 и Django 1.11.
  • Как разместить на странице инлайны инлайнов?

    @AntonIgin Автор вопроса
    javedimka: можете подсказать названия?
  • 502 Bad Gateway вместо Welcome to Nginx - в чем проблема?

    @AntonIgin Автор вопроса
    Все, уже сам нашел прямо сейчас - только что вспомнил про 0.0.0.0
  • 502 Bad Gateway вместо Welcome to Nginx - в чем проблема?

    @AntonIgin Автор вопроса
    Сейчас сделал так:

    1) С нулевого сервера скопировал из /etc/nginx/sites_available/default в аналогичный файл в локалке.

    2) Добавил index.nginx_debian.html по адресу /var/www/html/.

    Собственно, вот текущее содержание файла default:
    # You should look at the following URL's in order to grasp a solid understanding
    # of Nginx configuration files in order to fully unleash the power of Nginx.
    # http://wiki.nginx.org/Pitfalls
    # http://wiki.nginx.org/QuickStart
    # http://wiki.nginx.org/Configuration
    #
    # Generally, you will want to move this file somewhere, and start with a clean
    # file but keep this around for reference. Or just disable in sites-enabled.
    #
    # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
    ##
    
    # Default server configuration
    #
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
    
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;
    
        root /var/www/html;
    
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
    
        server_name _;
    
        location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
        }
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #   include snippets/fastcgi-php.conf;
        #
        #   # With php7.0-cgi alone:
        #   fastcgi_pass 127.0.0.1:9000;
        #   # With php7.0-fpm:
        #   fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #   deny all;
        #}
    }
    
    
    # Virtual Host configuration for example.com
    #
    # You can move that to a different file under sites-available/ and symlink that
    # to sites-enabled/ to enable it.
    #
    #server {
    #   listen 80;
    #   listen [::]:80;
    #
    #   server_name example.com;
    #
    #   root /var/www/example.com;
    #   index index.html;
    #
    #   location / {
    #       try_files $uri $uri/ =404;
    #   }
    #}


    Полагаю, при этих двух условиях уже все должно быть нормально. Но все равно вижу 502. Может, я куда-то не туда перехожу? Как точно узнать, где nginx готовится принять пользователя?
  • Как подключить статику сайта на рабочем сервере?

    @AntonIgin Автор вопроса
    все оказалось проще. Не уверен, что помогло именно это, так как я много чего делал за раз, но попзреваю, что все дело вдобавлении статики в urls.py

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^cart/', include('shop_cart.urls', namespace='cart')),
    url(r'^order/', include('orders.urls', namespace='orders')),
    url(r'', include('main_site.urls')),
    ] +static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)\
    + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

    Раньше прибавлял только медиа.
  • Как подключить статику сайта на рабочем сервере?

    @AntonIgin Автор вопроса
    (mag_env) anton@anton-X451CA:~/Django-u/magazine$ python manage.py collectstatic 
    You have requested to collect static files at the destination
    location as specified in your settings:
    
        /home/anton/Django-u/magazine/static
    
    This will overwrite existing files!
    Are you sure you want to do this?
    
    Type 'yes' to continue, or 'no' to cancel: yes
    
    0 static files copied to '/home/anton/Django-u/magazine/static', 1195 unmodified.
  • Как подключить статику сайта на рабочем сервере?

    @AntonIgin Автор вопроса
    Настроил согласно инструкции и попробовал тестить обоими вариантами по очереди:
    gunicorn magazine_project.wsgi
    gunicorn magazine_project.wsgi:application --bind 192.168.10.4:8000

    Первый выдает в результате исправный сайт, а вот второй не подгружает статику.
    Как быть? Что я пропустил? Понимаю, что комментарий будет большим, но надеюсь на помощь.

    Поэтапно опишу, что происходит, пока делаю все по инструкции.

    Вот дерево папок, связанных с Django-проектом:
    home
    --anton
    ----Django-u
    -------magazine
    ---------manage.py
    ---------static
    ---------main_site
    -----------models.py
    -----------views.py (и прочие файлы приложения)
    ---------magazine_project
    -----------settings.py
    -----------wsgi.py
    -----------urls.py
    -----------__init__.py

    На старте уже есть настроенный Django-проект, который исправно работает через python manage.py runserver, так что пропускаю этап настройки окружения и приложения. На всякий случай укажу:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')

    Итак, что я делаю по инструкции.

    Создаю /etc/systemd/system/gunicorn.service и вношу туда следующие данные:
    [Unit]
    Description=gunicorn daemon
    After=network.target
    
    [Service]
    User=sammy
    Group=www-data
    WorkingDirectory=/home/anton/Django-u/magazine
    ExecStart=/home/anton/virtenvs/mag_env/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/anton/Django-u/magazine/magazine.sock magazine_project.wsgi:application
    
    [Install]
    WantedBy=multi-user.target


    Результат:
    (mag_env) anton@anton-X451CA:~/Django-u/magazine$ sudo systemctl start gunicorn
    Failed to start gunicorn.service: Unit gunicorn.service is not loaded properly: Invalid argument.
    See system logs and 'systemctl status gunicorn.service' for details.
    (mag_env) anton@anton-X451CA:~/Django-u/magazine$ systemctl status gunicorn.service
    ● gunicorn.service - gunicorn daemon
       Loaded: error (Reason: Invalid argument)
       Active: inactive (dead)


    Странно, но при этом вторая команда сработала без ошибок:
    (mag_env) anton@anton-X451CA:~/Django-u/magazine$ sudo systemctl enable gunicornSynchronizing state of gunicorn.service with SysV init with /lib/systemd/systemd-sysv-install...
    Executing /lib/systemd/systemd-sysv-install enable gunicorn
    (mag_env) anton@anton-X451CA:~/Django-u/magazine$ sudo systemctl status gunicorn● gunicorn.service - gunicorn daemon
       Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset:
       Active: active (running) since Вс 2017-08-13 18:25:31 +07; 37s ago
     Main PID: 4396 (gunicorn)
       CGroup: /system.slice/gunicorn.service
               ├─4396 /home/anton/virtenvs/mag_env/bin/python3 /home/anton/virtenvs/
               ├─4401 /home/anton/virtenvs/mag_env/bin/python3 /home/anton/virtenvs/
               ├─4402 /home/anton/virtenvs/mag_env/bin/python3 /home/anton/virtenvs/
               └─4404 /home/anton/virtenvs/mag_env/bin/python3 /home/anton/virtenvs/
    
    авг 13 18:25:31 anton-X451CA systemd[1]: Started gunicorn daemon.
    авг 13 18:25:31 anton-X451CA gunicorn[4396]: [2017-08-13 18:25:31 +0700] [4396] 
    авг 13 18:25:31 anton-X451CA gunicorn[4396]: [2017-08-13 18:25:31 +0700] [4396] 
    авг 13 18:25:31 anton-X451CA gunicorn[4396]: [2017-08-13 18:25:31 +0700] [4396] 
    авг 13 18:25:31 anton-X451CA gunicorn[4396]: [2017-08-13 18:25:31 +0700] [4401] 
    авг 13 18:25:31 anton-X451CA gunicorn[4396]: [2017-08-13 18:25:31 +0700] [4402] 
    авг 13 18:25:31 anton-X451CA gunicorn[4396]: [2017-08-13 18:25:31 +0700] [4404] 
    авг 13 18:25:32 anton-X451CA systemd[1]: Started gunicorn daemon.


    Надеюсь, такой результат и нужен. К слову, в папке проекта появился файл magazine.sock.

    Далее прописываю команды:
    sudo systemctl daemon-reload
    sudo systemctl restart gunicorn

    После этого перехожу в /etc/nginx/sites_available и правлю файл default, внося такие параметры:
    server {
        listen 80;
        server_name 192.168.10.4;
        access_log  /var/log/nginx/example.log;
    
        location /static/ {
            root /home/anton/Django-u/magazine;
        }
    
        location / {
            proxy_pass http://127.0.0.1:8000; 
            proxy_set_header Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
      }


    Создаю ссылку в site_enabled:
    sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled

    sudo nginx -t показывается, что все enabled, successful и вообще хорошо. Прописываю остальное:
    sudo systemctl restart nginx
    sudo ufw delete allow 8000
    sudo ufw allow 'Nginx Full'

    Вот и все, что я сделал. Статика все еще не работает, если пытаться связать сайт со своим IP, а не с локальным хостом. Чего не хватает?
  • Supervisor & Celery 3.1.25: как настроить?

    @AntonIgin Автор вопроса
    Хасан Истамкулов: "In the /etc/supervisord.conf file, probably near the top, you’ll see a section called [unix_http_server]. Adjust the following settings"

    Файл обязательно должен быть в папке etc? Для создания любых файлов и папок в /etc/ нужен рут.

    Можно что-нибудь сделать, создав supervisord.conf в корневой папке проекта Django?
  • Supervisor & Celery 3.1.25: как настроить?

    @AntonIgin Автор вопроса
    У меня даже папки такой не создалось, когда я ставил в виртуальном окружении (к слову, для установки супервизора вне окружения через pip понадобилось добавлять sudo, то есть все равно нужен рут). Если же папку надо создавать самому, то, опять же, нужно использовать рут.

    Есть ли способы реализовать демон celery без рута?
  • В Firefox ко всем сайта автоматически подставляется www - как это исправить?

    @AntonIgin Автор вопроса
    Александр Мелихов: я только сейчас понял, что все перепутал: в Гугл хром нормально, в мозилле глюк. ПОльзуюсь обоими и часто не смотрю, где какие вкладки :D

    И все же проблема есть. Может, у браузеров схожие решения в этом плане?
  • Демон в celery для django: какнастроить?

    @AntonIgin Автор вопроса
    Anton Kuzmichev: я пока еще настраиваю и столкнулся с рядом ошибок, но решил поставить галку "авансом" - просто так. :-)

    Я сделал все по инструкции и вбил sudo /etc/init.d/celeryd start. Вот что из этого получилось:

    root@anton-X451CA:/home/anton# sudo /etc/init.d/celeryd start
    celery init v10.1.
    Using config script: /etc/default/celeryd
    celery multi v4.0.2 (latentcall)
    > Starting nodes...
    	> irr_parser@anton-X451CA: OK
    Traceback (most recent call last):
      File "/usr/lib/python3.5/runpy.py", line 184, in _run_module_as_main
        "__main__", mod_spec)
      File "/usr/lib/python3.5/runpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/__main__.py", line 18, in <module>
        main()
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/__main__.py", line 14, in main
        _main()
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/celery.py", line 326, in main
        cmd.execute_from_commandline(argv)
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/celery.py", line 488, in execute_from_commandline
        super(CeleryCommand, self).execute_from_commandline(argv)))
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/base.py", line 281, in execute_from_commandline
        return self.handle_argv(self.prog_name, argv[1:])
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/celery.py", line 480, in handle_argv
        return self.execute(command, argv)
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/celery.py", line 412, in execute
        ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/worker.py", line 220, in run_from_argv
        self.maybe_detach([command] + argv)
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/worker.py", line 227, in maybe_detach
        detached_celeryd(self.app).execute_from_commandline(argv)
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/celeryd_detach.py", line 96, in execute_from_commandline
        **vars(options)
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/bin/celeryd_detach.py", line 32, in detach
        after_forkers=False):
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/platforms.py", line 334, in open
        self.after_chdir()
      File "/home/anton/Django-u/irr_parser/env-34/lib/python3.5/site-packages/celery/platforms.py", line 411, in after_chdir_do
        logfile and open(logfile, 'a').close()
    <b>PermissionError: [Errno 13] Permission denied: '/var/log/celery/irr_parser.log'</b>


    Вопрос: почему так? Я ведь делаю все под рутом, и в celeryd указал так:
    CELERYD_USER="root"
    CELERYD_GROUP="root"

    Что я забыл?
  • Демон в celery для django: какнастроить?

    @AntonIgin Автор вопроса
    Грубо говоря, как узнать, какие данные нужно вводить лично мне?
  • Демон в celery для django: какнастроить?

    @AntonIgin Автор вопроса
    А как создать этого celery-пользователя? Просто я первый раз слышу о подобном в контексте celery.
  • Демон в celery для django: какнастроить?

    @AntonIgin Автор вопроса
    Anton Kuzmichev: в папке etc есть и initd, и systemd.
  • ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO): что делать?

    @AntonIgin Автор вопроса
    Konstantin Malyarov: тот же результат, ошибка на месте.
  • ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO): что делать?

    @AntonIgin Автор вопроса
    Boris Korobkov: Не может найти такой файл. Заглянул сам - и правда такого нет.
  • Отложенная рассылка уведомлений: как в Django ежеминутно проверять, пора ли выполнять скрипт?

    @AntonIgin Автор вопроса
    Ок, допустим, я создал задачу check_notification_orders, с timedelta=60 (или как там это задается, буду потом смотреть), которая берет все объекты модели с фильтром (дата публикации меньше или равна текущей), рассылает уведомления и закрывает заявки,
    А как запустить этот таск с самого начала работы сайта?
  • WSGIRequest: POST '/' is not JSON serializable: как подружить Django, Celery и POST-форму?

    @AntonIgin Автор вопроса
    JaxxDexx: Все оказалось гораздо проще :D
    Надо было перезагрузить воркер - я не знал, что он их загружает единожды в начале и не обращает внимания на изменения в тасках во время работы.

    Когда это узнал, проблема решилась сама собой.