Nodejs + vue

  1. Устанавливаем любым доступным способом NodeJS
  2. Устанавливаем vue-cli
    sudo npm install -g vue-cli
  3. С помощью vue-cli разворачиваем приложение:
    vue init webpack chat-vue
  4. Переходим в созданую дирректорию с проектом vuejs и запускаем dev server
    cd chat-vue
    npm run dev

Основные файлы

 

yury@Air:~/Desktop/MyDevApp/WormsChat/chat-vue$ tree -L 1
.
├── README.md
├── build                       # Настройки билда проекта. Dev и Prod версии
│   ├── build.js
│   ├── check-versions.js
│   ├── logo.png
│   ├── utils.js
│   ├── vue-loader.conf.js
│   ├── webpack.base.conf.js
│   ├── webpack.dev.conf.js
│   └── webpack.prod.conf.js
├── config                       # Конфигурационные файлы. Настройки
│   ├── dev.env.js
│   ├── index.js
│   └── prod.env.js
├── index.html                   # Отправной файл всего проекта. Инициализация проекта в div="app"
├── node_modules                 # Тоже самое, что site-packeges в Django
│   ├── ...
├── package-lock.json
├── package.json
├── src                         # Содержит тот проект, который будем писать
│   ├── App.vue                 # Главный компонент, который запускает весь проект
│   ├── assets                  # Дополнительные файлы: css, img, fonts 
│   │   └── logo.png
│   ├── components              # Каждый компонент отвечает за какую то свою логику. Чем то похожи на app в Django
│   │   └── HelloWorld.vue
│   ├── main.js                 # Управляющий файл всем проектом
│   └── router                  # Содержит файл url дл проекта
│       └── index.js
└── static
├── .editconfig                 # Настройки проекта
├── packege.json                # Описание проекта. Установленные пакеты для Dev and Project

Публикация проекта на timeweb

shonline@sabrina:~/virtualenv-15.1.0$ python3 virtualenv.py ~/words.showiproute.ru/venv/ 
cd ~/words.showiproute.ru/
source venv/bin/activate
cd public_html
git clone https://gitlab.com/yuryrun/netmelang.git          
cd netmelang/
(venv) shonline@sabrina:~/words.showiproute.ru/public_html/netmelang$ pip3 install -r requirements.txt

Указываем настройки БД в settings.py

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass

DATABASES = {
	'default': {
	'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
	'NAME': 'xxxx',
	'USER': 'xxxx',
	'PASSWORD': 'yyyy',
	}
}

Создаем БД, посльзователя, делаем коллектстатик

public_html/.htaccess


Options +ExecCGI
AddHandler wsgi-script .wsgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.wsgi/$1 [QSA,PT,L]
public_html/index.wsgi

import os
import sys

sys.path.append('/home/s/shonline/words.showiproute.ru/public_html/langmeup/') #путь до проекта django
sys.path.append('/home/s/shonline/words.showiproute.ru/venv/lib/python3.4/site-packages/') # путь до django /home/s/shonline/words.showiproute.ru
os.environ['DJANGO_SETTINGS_MODULE'] = 'langmeup.settings' #app - название проекта django.

import django
django.setup()

from django.core.handlers import wsgi
application = wsgi.WSGIHandler()

Статические файлы положить в корень сайта

/public_html/static/

И указать это в STATIC_ROOT

Миграции для текстовых полей

Часто, при добавлении новых полей в модель/БД, и выполнении ./manage.py makemigrations, django хочет знать, чем заполнить поля в строках таблицы которые уже есть или могут быть. Null он туда подставить не может, т.к. поле текстовое, поэтому выбираем 1 и указываем ""

You are trying to add a non-nullable field 'tree_id' to vrf without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows)
 2) Quit, and let me add a default in models.py
Select an option: 1
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now()
>>> ""

WSGI в двух словах

Работа с веб отличается от работы с не-веб одной простой вещью:
— сервер (апач, нжинкс и т.п.) получает запрос (а запрос — это строка) от браузера,
— сервер обращается к приложению, передавая ему эту строку как аргумент,
— приложение возвращает результат (тоже строку),
— сервер отдаёт полученную строку в браузер.
Конкретно для питона такое подключение скрипта к веб-серверу решается с помощью WSGI.

(далее…)