sudo apt-get install postgresql-9.3 pgadmin3
Создаем папку для postgresql:|
1
|
sudo /etc/init.d/postgresql reload
|
|
1
2
3
4
5
|
PATH=/usr/lib/postgresql/9.3/bin:$PATH
export PATH
sudo mkdir -p /home/postgres/pgsql/data
sudo chown -R postgres:postgres /home/postgres
|
|
1
2
|
sudo -u postgres psql
postgres=# ALTER USER postgres PASSWORD 'postgres';
|
|
1
|
host all all 0.0.0.0/0 md5
|
|
1
2
|
data_directory = '/home/postgres/pgsql/data'
listen_addresses = '*'
|
|
1
|
sudo -u postgres initdb -D /home/postgres/pgsql/data
|
|
1
|
sudo /etc/init.d/postgresql reload
|
sudo add-apt-repository ppa:bumblebee/stable
sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-325 nvidia-settings-325
? sudo add-apt-repository -r ppa:xorg-edgers/ppa - ПОД ВОПРОСОМ у меня заработало без удаления репозитория
sudo apt-get update
sudo apt-get install bumblebee bumblebee-nvidia
sudo apt-get dist-upgrade
sudo apt-get install primus
Изменить параметр "Bridge" на "primus" в фаиле /etc/bumblebee/bumblebee.conf
optirun --status
optirun nvidia-settings -c :8
$ sudo aptitude install python-django
$ sudo mkdir ~/django
$ cd ~/django
$ wget http://www.djangoproject.com/download/1.1/tarball/
$ tar xzf Django-1.1.tar.gz
Далее, необходимо узнать, в какую директорию необходимо
устанавливать пакеты, чтобы Python узнал об этом. Для этого необходимо
выполнить:
$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.5/site-packages
В данном случае, видно что основной версией является
Python 2.5 и все дополнительные пакеты устанавливаются в директорию
"/usr/lib/python2.5/site-packages".
$ sudo ln -s ~/django/Django-1.1/django /usr/lib/python2.5/site-packages/django
И в конце, чтобы сделать команду django-admin.py
доступной из любой директории системы, необходимо добавить еще одну
символическую ссылку:
$ sudo ln -s ~/django/Django-1.1/django/bin/django-admin.py /usr/local/bin
$ python -c "import django; print django.VERSION;"
(1, 1, 0, 'final', 0)
Все в порядке. Последняя версия Django корректно установлена.
$ sudo aptitude install apache2 libapache2-mod-wsgi
$ sudo aptitude install mysql-server python-mysqldb
При установке необходимо будет указать пароль для root-пользователя БД MySQL.
# директория для django проектов
$ sudo mkdir -p /home/django-projects/debianworld_ru
# новый django-проект
$ cd /home/django-projects/debianworld_ru
$ sudo django-admin.py startproject apps
# корректируем название модуля для корректного импорта
$ sudo perl -pi -e 's/apps.urls/urls/g' apps/settings.py
# директория для настроек wsgi
$ sudo mkdir -p /home/django-projects/debianworld_ru/deploy
# директория для статики
$ sudo mkdir -p /home/django-projects/debianworld_ru/media
# директория для логов
$ sudo mkdir -p /home/django-projects/debianworld_ru/logs
# создается системная группа
$ sudo addgroup --quiet --system dw
# создается системный пользователь
$ sudo adduser --quiet --system --ingroup dw --no-create-home --no-create-home dw
# новый владелец для проекта
$ sudo chown dw:www-data -R /home/django-projects/debianworld_ru
# права доступа на проект. Право на чтение для www-data необходимо
# для корректной отдачи статики
$ sudo chmod u=rwx,g=rx,o= -R /home/django-projects/debianworld_ru
$ sudo -u dw vim /home/django-projects/debianworld_ru/deploy/debianworld.ru
И добавить в него следующий код:
<VirtualHost 10.1.0.4>
# Описание сервера
ServerAdmin admin@wsgi.debianworld.ru
ServerName wsgi.debianworld.ru
# Логи
ErrorLog /home/django-projects/debianworld_ru/logs/error_log
CustomLog /home/django-projects/debianworld_ru/logs/access_log common
# wsgi-обработчик (см. ниже)
WSGIScriptAlias / /home/django-projects/debianworld_ru/deploy/django.wsgi
# Параметры запуска wsgi
WSGIDaemonProcess dw-site user=dw group=dw home=/home/django-projects/debianworld_ru/media/ \
processes=2 threads=4 maximum-requests=100 display-name=apache-dw-wsgi
WSGIProcessGroup dw-site
# Статические файлы django-админки
Alias "/media_admin/" "/usr/lib/python2.5/site-packages/django/contrib/admin/media/"
<Location "/media_admin/">
SetHandler None
</Location>
# Статические файлы проекта
Alias "/media/" "/home/django-projects/debianworld_ru/media/"
<Location "/media/">
SetHandler None
</Location>
</VirtualHost>
В данном случае 10.1.0.4 - это IP-адрес машины, на которой работает Apache.
$ sudo -u dw vim /home/django-projects/debianworld_ru/deploy/django.wsgi
В файл добавляется следующий код:
#/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys
# В python path добавляется директория проекта
dn = os.path.dirname
PROJECT_ROOT = os.path.abspath( dn(dn(__file__)) )
DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT, 'apps')
sys.path.append( DJANGO_PROJECT_ROOT )
# Установка файла настроек
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
# Запуск wsgi-обработчика
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
# Добавляет ссылку на виртуальный хост в список доступных хостов
$ sudo ln -s /home/django-projects/debianworld_ru/deploy/debianworld.ru \
/etc/apache2/sites-available/debianworld.ru
# включаем виртуальный хост
$ sudo a2ensite debianworld.ru
# рестарт Apache
$ sudo /etc/init.d/apache2 restart
It worked!
Congratulations on your first Django-powered page.
Of course, you haven't actually done any work yet. Here's what to do next:
* If you plan to use a database, edit the DATABASE_* settings in settings/settings.py.
* Start your first app by running python settings/manage.py startapp [appname].
$ mysql --user=root -p
И создать новую базу данных и нового пользователя:
mysql> CREATE DATABASE debianworld_db CHARACTER SET utf8;
Query OK, 1 row affected (0.01 sec)
mysql> CREATE USER debianworld_usr@localhost IDENTIFIED BY 'mega-secure-password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON debianworld_db.* TO debianworld_usr@localhost;
Query OK, 0 rows affected (0.00 sec)
После того, как новые БД и пользователь готовы,
необходимо прописать их в конфиг Django. Для этого необходимо открыть
файл настроек:
$ sudo -u dw vim /home/django-projects/debianworld_ru/apps/settings.py
И прописать следующие значения:
# ...
DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'debianworld_db' # Or path to database file if using sqlite3.
DATABASE_USER = 'debianworld_usr' # Not used with sqlite3.
DATABASE_PASSWORD = 'mega-secure-password' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
# ...
Кроме того, чтобы правильно "подхватились" статические файлы django-админки и основго проекта, необходимо так же прописать:
# ...
MEDIA_URL = '/media/
ADMIN_MEDIA_PREFIX = '/media_admin/'
# ...
И в заключении, необходимо дать команду Django создать в БД основные таблицы:
$ sudo -u dw /home/django-projects/debianworld_ru/apps/manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'dw'): admin
E-mail address: admin@wsgi.debianworld.ru
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model
Вот и все. Теперь Django настроено полностью. Далее можно создавать приложения слдеующей командой:
$ sudo -u dw /home/django-projects/debianworld_ru/apps/manage.py startapp firstapp
или непосредственно под тем пользователем, под которым работает весь код проекта:
$ sudo -u dw bash
$ cd /home/django-projects/debianworld_ru/apps/
$ ./manage.py startapp firstapp
| Команда | Краткое описание |
| .databases | Вывод списка имен всех подключенных в текущем сеансе баз данных и соответствующих им файлов. |
| .dump ?TABLES?: | Дамп всех SQL инструкций использованных в создании БД или отдельной таблицы в текстовом формате |
| .echo ON|OFF | ВКЛ | ВЫКЛ эхо введенных команд |
| .exit | Выход из программы |
| .explain ON|OFF | Управляет режимом вывода виртуальных машинных команд. Используется при выполнении SQL запроса EXPLAIN. |
| .header(s) ON|OFF | ВКЛ | ВЫКЛ показ заголовков столбцов |
| .import FILE TABLE | Импорт данных из файла FILE в таблицу TABLE |
| .indices TABLE | Показывает имена всех индексов таблицы |
| .mode MODE | Установка режима вывода: line(s), column(s), insert, list, html и других |
| .nullvalue STRING | Напечатает строку STRING вместо NULL данных при выводе SQL запроса SELECT |
| .output FILENAME | Послать весь вывод в файл FILENAME |
| .output stdout | Послать весь вывод на экран |
| .promt MAIN COTINUE | Изменить стандартную строку подсказки |
| .quit | Выход их программы |
| .read FILENAME | Выполнение SQL инструкций из файла FILENAME |
| .schema ?TABLE? | Покажет текст SQL инструкции CREATE для всех таблиц или указанной таблицы |
| .separator STRING | Изменить строку разделитель колонок, используется при выводе SQL запроса SELECT и команды .import |
| .show | Показать значения установленных переменных |
| .tables ?PATTERN? | Вывод списка имен таблиц БД (возможно по шаблону) |
| .timeout MS | Блокирование открытия таблиц на число миллисекунд MS |
| .width NUM NUM : | Установка ширины столбцов при выводе в режиме column |
sqlite3 exam.db SQLite version 3.1.3 Enter ".help" for instructionsГде exam.db имя создаваемой базы данных.
sqlite> CREATE TABLE tbl1 (one INTEGER PRIMARY KEY AUTOINCREMENT, two VARCHAR(50), three REAL);Вставим несколько записей в данную таблицу. Отмечу, что в инструкции создания таблицы для каждого поля мы задали тип данных для его значений, этот тип данных игнорируется программой "SQLite". Система управления базой данных "SQLite" довольно свободно относится к определению типов данных, что не характерно для стандарта языка SQL. Типизация данных в "SQLite" основывается на так называемом принципе "typeless", означающий игнорирование информации о типе данных в определении столбцов таблицы при ее создании с помощью инструкции CREATE TABLE. И все же лучше включать имена типов столбцов при объявлении таблиц, это повысит переносимость вашей базы данных. Имеется одно исключение из принципа "typeless" - это столбец типа INTEGER PRYMARY KEY (INTEGER не INT; INT PRIMARY KEY - удовлетворяет принципу "typeless"). Столбец с типом INTEGER PRIMARY KEY должен содержать 32-х битное целое число, попытка записать данные любого другого типа в столбец этого типа приведет к ошибке. Этот тип обычно используется перед спецификатором столбца AUTOINCREMENT, столбец с типом INTEGER PRIMARY KEY AUTOINCREMENT является ключевым столбцом таблицы, его значения генерируются автоматически.
sqlite> INSERT INTO tbl1 VALUES(NULL, 'hello', 3.10); sqlite> INSERT INTO tbl1 VALUES(NULL, 'is', 5.34); sqlite> INSERT INTO tbl1 VALUES(NULL, 'from', NULL);Создадим, пока пустую таблицу tbl2 и индекс по ее первому полю "ikey".
sqlite> CREATE TABLE tbl2 (ikey INTEGER PRIMARY KEY, nm VARCHAR(50)); sqlite> CREATE UNIQUE INDEX itbl2 ON tbl2(ikey); sqlite>Команда .dump
.dump ?TABLE?где TABLE - необязательное имя таблицы, для которой вы хотите получить дамп SQL инструкций.
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE tbl1 (one integer primary key autoincrement, two varchar(50),
three real);
INSERT INTO "tbl1" VALUES(1, 'hello', 3.1);
INSERT INTO "tbl1" VALUES(2, 'is', 5.34);
INSERT INTO "tbl1" VALUES(3, 'from', NULL);
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('tbl1', 3);
CREATE TABLE tbl2 (ikey integer integer primary key, nm VARCHAR(20));
CREATE UNIQUE INDEX itbl2 on tbl2(ikey);
COMMIT;
sqlite>
Эту команду можно использовать для экспорта базы данных созданную в SQLite в другую программу работы с базами данных. Для этого необходимо сохранить полный дамп SQL инструкций в файле. sqlite> .output exam.sql --перенаправить вывод в файл sqlite> .dumpКоманда .header(s)
.header(s) ON | OFFгде,
sqlite> .header ON sqlite> SELECT * FROM tbl1; one|two|three 1|hello|3.1 2|is|5.34 3|from| sqlite> .header OFF sqlite> SELECT * FROM tbl1; 1|hello|3.1 2|is|5.34 3|from| sqlite>Команда .import
.import FILE TABLEгде,
1;Roy 2;Ted 3;Sam 4;BobВставим эти данные в таблицу tbl2, для этого выполним следующие команды:
sqlite> .separator ';' -- установим символ-разделитель в точку с запятой sqlite> .import exam.txt tbl2 -- импорт данных sqlite> SELECT * FROM tbl2; 1; Roy 2; Ted 3; Sam 4; BobКоманда .mode
sqlite> .mode csv sqlite> SELECT * FROM tbl1; 1,"hello",3.1 2,"is",5.34 3,"from", sqlite>Режим удобен для экспорта таблицы в сторонние программы, например данный формат, понимает Excel.
sqlite> .mode columns sqlite> SELECT * FROM tbl1; 1 hello 3.1 2 is 5.34 3 from sqlite>Смотрите также команду .width для задания ширины столбцов.
sqlite> .mode html sqlite> SELECT * FROM tbl2; <TR><TD>1</TD> </TD>Roy </TR> <TR><TD>2</TD> </TD>Ted </TR> <TR><TD>3</TD> </TD>Sam </TR> <TR><TD>4</TD> </TD>Bob </TR> sqlite>Режим insert. В данном режиме генерируются SQL запросы INSERT для таблицы, имя которой указано третьим параметром в команде.
.mode insert TABLEгде TABLE - имя таблицы, для которой генерируются инструкции INSERT
sqlite> .mode insert tbl3 sqlite> SELECT * FROM tbl1; INSERT INTO tbl3 VALUES(1,'hello',3.1); INSERT INTO tbl3 VALUES(2,'is',5.34); INSERT INTO tbl3 VALUES(3,'from',NULL); sqlite>Режим line. Здесь каждый столбец выводится в отдельной строке в формате имя_столбца = значение. Записи разделяются пустой строкой.
sqlite> .mode line sqlite> SELECT * FROM tbl1; one = 1 two = hello three = 3.1 one = 2 two = is three = 5.34 one = 3 two = from three = sqlite>Режим list. Является режимом, установленным по умолчанию. Каждая запись таблицы выводится в отдельной строке с разделением столбцов символом-разделителем. Символ-разделитель определяется командой .separator, и по умолчанию равен прямой черте '|'.
sqlite> .mode list sqlite> SELECT * FROM tbl1; 1|hello|3.1 2|is|5.34 3|from| sqlite>Режим tabs. В данном режиме столбцы записей таблицы отделяются друг от друга символом табуляции.
sqlite> .mode tabs sqlite> SELECT * FROM tbl1; 1 hello 3.1 2 is 5.34 3 from sqlite>Режим tcl. Вывод выполнен в формате элементов списка языка TCL.
sqlite> .mode tcl sqlite> SELECT * FROM tbl2; "1" " Roy \r" "2" " Ted\r" "3" " Sam\r" "4" " Bob\r" sqlite>Команда .output
.output FILENAME .output stdoutгде,
.read FILENAMEгде FILENAME - имя файла содержащего SQL инструкции
BEGIN TRANSACTION;
CREATE TABLE tbl3 (name VARCHAR(30), lastname VARCHAR(50), num INT);
INSERT INTO tbl3 VALUES ('Jim', 'Green', 1653);
INSERT INTO tbl3 VALUES ('Ann', 'Folkin', 1891);
INSERT INTO tbl3 VALUES ('Fredy', 'Donovan', 2345);
COMMIT;
Назовем созданный файл exam.sql, и выполним следующие команды: sqlite> .read exam.sql sqlite> SELECT * FROM tbl3; Jim|Green|1653 Ann|Folkin|1891 Fredy|Donovan|2345 sqlite>Команда .schema
.schema ?TABLE?где, ?TABLE ? - необязательное имя таблицы
sqlite> .schema CREATE TABLE sqlite_sequence(name,seq); CREATE TABLE tbl1 (one integer primary key autoincrement, two varchar(50), three real); CREATE TABLE tbl2 (ikey integer integer primary key, nm VARCHAR(20)); CREATE TABLE tbl3 (name VARCHAR(30), lastname VARCHAR(50), num INT); CREATE UNIQUE INDEX itbl2 on tbl2(ikey); sqlite>Команда .tables
.tables ?PATTERN?где ?PATERN? - необязательное определение шаблона поиска
sqlite> .tables sqlite_sequence tbl1 tbl2 tbl3 sqlite> .tables %tb% 'с шаблоном tbl1 tbl2 tbl3 sqlite>Команда .width
.width NUM NUM :где NUM - ширина соответствующего столбца в символах.
sqlite> .mode column sqlite> .width 3 10 7 sqlite> SELECT * FROM tbl1; 1 hello 3.1 2 is 5.34 3 from sqlite>