Возможно кому то еще пригодится странная конструкция из несколько софтинок, позволяющая наносить на карту свои объекты и затем показывать с веб-сервера.
В условиях когда интернет слабый или его вообще нет (по разным причинам) локальная реализация может пригодится.
Кому то просто захочется поставить рельсовый сервер для обучения.
Моя задача простирается чуть далее, редактировать, складывать результаты на локальный сервер и с него показывать для внутренних нужд.
Установка Rails on Ruby это только начало пути.
STEP 1
Ставим ubuntu-12.04.3-server-i386. (Здесь и далее версии файлов с точностью до точки)
English – Enter
Install Ubuntu Server – Enter
Language – English – Enter
Country, territory or area – United States – Enter
Detect keyboard layout – No – Enter
Country od origin for the keyboard – English(US) –Enter
Keyboard layout – English(US) – Enter
Hostname – Ubuntu – Continue
Full name for the new user – OSM-USER – Continue
Username for your account – osm – Continue
Choose a password for the new user – password –Continue
Re-enter password to verify – password –Continue
Encrypt your home directory – No – Enter
Select your time zone – Select from worldwide list – Enter
Partitioning method – use entire disk – Enter
Select disk to partition – SCSI3 (0,0,0) – XXX GB ATA HARDDISK – Enter
Write the changes to disk – Yes – Enter
HTTP proxy information (blank for none) - - Continue
How do you want to manage upgrades on this system – No automatic updates – Enter
Choose software to install – Ничего не выбираем – Continue
Install the GRUB boot loader to the master boot record – Yes – Enter
Installation complete – remove CD-ROM – Continue
STEP 2 Небольшие настройки ( SSH, Putty)
Сервер загрузился, логинимся пользователем osm (мы его определили при инсталляции) с паролем password (тоже при инсталляции завели).
$ sudo apt-get install ssh
Как минимум стоит поправить номер порта в конфигурации sshd:
$ sudo vi /etc/ssh/sshd_config
любой отличный от дефолтного 22.
и перезапускаем sshd:
$ sudo service ssh restart
$ ifconfig
(если адрес выделен динамически то стоит его посмотреть и записать, если статический то тогда до настроить сетевое окружение в файле /etc/network/interfaces)
Скачиваем из инета putty на свою любимую виндовую машину и указываем в настройках адрес удаленной машины, порт и протокол SSH).
Почему putty? Он позволит копировать и переносить длинные установочные команды из текста приведенного ниже. (в винде «Копировать» в командной строке putty просто нажать правую клавишу мышки)
Еще немного системных настроек
Выставим timezone
$ sudo dpkg-reconfigure tzdata
Установим время-дату (MMDDHHmmYYYY):
$ sudo date 101111102013
STEP 3 Собственно установка Ruby on Rials и локального OpenStreetMap сервера
(Установка написана по материалам с GiHub)
Минимальная конфигурация представляет bundle из следующих продуктов:
• Ruby 1.9.3
• RubyGems 1.3.1+
• Postgres 8.3+
• ImageMagick
• Bundler
Указанная конфигурация может быть установлена на Ubuntu следующими командами:
$ sudo apt-get install ruby1.9.1 libruby1.9.1 ruby1.9.1-dev ri1.9.1 libmagickwand-dev libxml2-dev libxslt1-dev apache2 apache2-threaded-dev build-essential git-core postgresql postgresql-contrib libpq-dev postgresql-server-dev-all libsasl2-dev
$ sudo gem1.9.1 install bundle
В двух местах выскочили предупреждения lib not found но это в разделе документация для ri (предположим что не страшно).
Скачаем repository в нашу домашнюю директорию ( $ cd ~/
Содержимое сравнительно большое (~150MB), запускаем:
$ git clone https://github.com/openstreetmap/openstreetmap-website.git
Устанавливаем Ruby gems
Мы воспользуемся набором инструментом bundle Bundler для создания среды rubygems необходимой для нашего проекта.
$ cd openstreetmap-website
$ sudo bundle install
Настраиваем приложения
Нам необходимо создать конфигурационный файл config/application.yml
скопировав его с example template. В файле содержаться различные конфигурационные опции.
$ cp config/example.application.yml config/application.yml
Вы можете уточнить параметры настроек изменив их в файле config/application.yml
.
Настройка параметров Базы Данных
The Rails Port использует три базы данных - одна для разработки, одна для тестирования и одна для «боевой» эксплуатации. Конфигурационные настройки хранятся в файле config/database.yml
, который мы тоже скопируем с файла примера (example template).
$ cp config/example.database.yml config/database.yml
PostgreSQL сконфигурирован, по умолчанию, устанавливать локальные соединения не требующие имени пользователя и пароля. Это хорошо для этапа разработки.
Если Вам потребуется изменить эти настройки то Вы сможете это проделать изменив параметры файла config/database.yml
и поправить инструкции приведенные ниже по тексту.
Настройка параметров аккаунта в PostgreSQL
Нам необходимо создать PostgreSQL role (то есть пользовательский аккаунт) for your current user, и для этого потребуются права superuser чтобы мы смогли создавать базы данных.
osm@TS: $ sudo -u postgres –i
postgres@TS: createuser -s <username>
postgres@TS: exit
Создаем базы данных
Вначале установим Javascript runtime, в явном виде его нет, потому ставим nodejs который установит нам необходимый пакет.
$ sudo apt-get install nodejs
Для создания баз данных для разработки, тестирования и эксплуатации исполняем (в оригинале было $ sudo bundle exec rake db:create, однако завершается эта команда с ошибкой. В гугле куча советов, но почему то в моем случае эффекта не дало, потому следующая кривизна):
osm@ubuntu:~/openstreetmap-website$ sudo -u postgres –i
postgres@ubuntu:~$ createdb -E UTF8 -O osm osm
postgres@ubuntu:~$ createdb -E UTF8 -O osm osm_test
postgres@ubuntu:~$ createdb -E UTF8 -O osm openstreetmap
postgres@ubuntu:~$ exit
Ставим PostgreSQL Btree-gist Extension
$ psql -d openstreetmap -c "CREATE EXTENSION btree_gist"
Компилим PostgreSQL Functions
$ cd db/functions
$ make libpgosm.so
$ cd ../..
$ psql -d openstreetmap -c "CREATE FUNCTION maptile_for_point(int8, int8, int4) RETURNS int4 AS '`pwd`/db/functions/libpgosm', 'maptile_for_point' LANGUAGE C STRICT"
$ psql -d openstreetmap -c "CREATE FUNCTION tile_for_point(int4, int4) RETURNS int8 AS '`pwd`/db/functions/libpgosm', 'tile_for_point' LANGUAGE C STRICT"
$ psql -d openstreetmap -c "CREATE FUNCTION xid_to_int4(xid) RETURNS int4 AS '`pwd`/db/functions/libpgosm', 'xid_to_int4' LANGUAGE C STRICT"
Устанавливаем структуру Баз (Database structure)
Чтобы создать все таблицы, индексы и пр. запускам:
$ bundle exec rake db:migrate RAILS_ENV=development
(вместо оригинального bundle exec rake db:migrate)
Теперь можно запустить тесты, чтобы быть уверенным что в целом все хорошо:
$ bundle exec rake test
Тест занимает несколько минут и output parser может сказать о нескольких ошибках типа “Attribute lat redefined.” Их можно игнорировать.
Собственно можно запустить сервер
$ bundle exec rails server
Теперь с помощью броузера можно посмотреть результат своей работы по адресу http://localhost:3000/
То что Вы увидите в броузере это карта с внешнего tile сервера. Однако сделан первый шаг – у нас есть локальный рельсовый сервер.
To be continied….