Настройка приложения Ruby on Rails на PostgreSQL в Ubuntu 18.04

Приложения на веб-фреймворке Ruby on Rails по умолчанию используют базу данных SQLite. Это очень легкая, портируемая и дружественная система управления базами данных, которая особенно хорошо работает в средах с нехваткой памяти. В большинстве случаев это неплохой вариант. Однако для очень сложных приложений, которым требуется более надежная целостность данных и программная расширяемость, SQLite слишком слабая. Тут лучше использовать PostgreSQL. Чтобы настроить приложение Ruby on Rails для использования PostgreSQL, вам нужно выполнить несколько дополнительных шагов.

В этом мануале мы покажем, как настроить среду разработки Ruby on Rails на использование PostgreSQL на сервере Ubuntu 18.04. Вы узнаете, как установить и настроить PostgreSQL, а затем протестируете ваши настройки, создав приложение Rails, которое использует PostgreSQL в качестве своей базы данных.

Требования

1: Установка PostgreSQL

Сначала нужно установить на свой сервер PostgreSQL.

Откройте сессию пользователя с доступом к sudo и обновите список пакетов APT, чтобы получить последние версии репозиториев:

sudo apt update

Теперь можно установить PostgreSQL:

sudo apt install postgresql postgresql-contrib libpq-dev

В предыдущей команде указано несколько пакетов. Первый, postgresql, содержит основную программу PostgreSQL. Второй пакет, postgresql-contrib, добавляет несколько функций в PostgreSQL и расширяет возможности СУБД. Пакет libpq-dev – это библиотека PostgreSQL, которая позволяет клиентам отправлять запросы и получать ответы от бэкенд-сервера, благодаря чему ваше приложение сможет взаимодействовать с БД.

Теперь СУБД PostgreSQL и ее зависимости установлены на ваш сервер. Пора создать роль, с помощью которой приложение Rails сможет создать свою БД.

2: Создание новой роли

В PostgreSQL роли можно использовать для организации разрешений и авторизации – так же, как используются пользователи в Linux. на данном этапе вы узнаете, как создать новую роль суперпользователя для пользователя в Linux, что позволит вам создавать и настраивать базы данных в системе PostgreSQL.

Чтобы создать роль суперпользователя PostgreSQL, введите следующую команду, заменив выделенное имя именем вашего пользователя Ubuntu 18.04:

sudo -u postgres createuser -s 8host -P

Поскольку мы указали флаг -P, команда предложит ввести пароль для новой роли. Введите пароль, только обязательно запишите его, чтобы вы могли использовать его в конфигурационном файле.

Только что мы использовали createuser для создания роли по имени 8host. Флаг -S передал этому пользователю привилегии суперпользователя, а флаг sudo -u позволил запустить команду из учетной записи postgres, которая автоматически создается при установке PostgreSQL.

Примечание: Поскольку режим аутентификации для PostgreSQL в Ubuntu 18.04 начинается с ident, по умолчанию пользователь Ubuntu может работать в PostgreSQL только с той ролью, имя которой совпадает с его именем. За дополнительной информацией обращайтесь к официальной документацией PostgreSQL.

Если вы не использовали флаг -P в команде, но хотите установить пароль для роли после ее создания, откройте консоль PostgreSQL:

sudo -u postgres psql

Вы получите следующий вывод:

psql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1))
Type "help" for help.
postgres=#

Консоль PostgreSQL в командной строке определяется префиксом postgres=#. Введите эту команду, чтобы установить пароль для новой роли БД (укажите свое имя):

\password 8host

PostgreSQL предложит вам ввести пароль. Введите и затем подтвердите его.

Теперь выйдите из консоли PostgreSQL, введя эту команду:

\q

Вы вернетесь в обычную командную строку.

Итак, вы создали новую роль PostgreSQL с привилегиями суперпользователя. Теперь пора создать новое приложение Rails, которое будет использовать эту роль для создания базы данных.

3: Создание нового Rails-приложения

Теперь вы можете создать новое приложение Rails, настроенное на использование PostgreSQL в качестве базы данных.

Сначала перейдите в свой домашний каталог:

cd ~

Создайте новое приложение Rails в этом каталоге, заменив имя приложения:

rails new appname -d=postgresql

Опция -d=postgresql задает PostgreSQL в качестве базы данных.

После того как вы запустите эту команду, в вашем домашнем каталоге появится новая папка appname, содержащая все элементы базового приложения Rails.

Перейдите в каталог приложения:

cd appname

Теперь, когда вы создали новое приложение Rails и перешли в корневой каталог своего проекта, вы можете создать и настроить базу данных PostgreSQL.

4: Настройка и создание базы данных

При создании баз данных для разработки и тестирования приложение Rails мы будем использовать роль PostgreSQL, которую ранее создали для своего пользователя Ubuntu. Чтобы Rails мог создавать эти БД, нужно откорректировать конфигурации базы данных вашего проекта. После этого можно создать БД.

Сначала необходимо внести в ваше приложение Rails пароль для роли PostgreSQL, которую вы создали ранее. Для защиты конфиденциальной информации, такой как пароли, рекомендуется хранить ее в переменной среды, а не записывать ее непосредственно в конфигурации.

Чтобы сохранить ваш пароль в переменной среды при входе в систему, выполните следующую команду, где вместо APPNAME укажите имя вашего приложения, а вместо PostgreSQL_Role_Password – пароль, который вы создали в предыдущем разделе:

echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc

Эта команда записывает команду export в ваш файл ~/.bashrc, благодаря чему переменная среды будет установлена при входе в систему.

Чтобы экспортировать переменную для текущего сеанса, используйте команду source:

source ~/.bashrc

Теперь, когда вы сохранили пароль в своей среде, пришло время отредактировать сам конфигурационный файл.

Откройте конфигурации БД в текстовом редакторе:

nano config/database.yml

В разделе default найдите строку:

pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

и добавьте после нее следующие выделенные строки, указав свои учетные данные и переменную среды, которую вы создали. Этот раздел будет выглядеть примерно так:


default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: 8host

password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

development:
<<: *default
database: appname_development

Благодаря этим настройкам приложение Rails сможет запускать базу данных с правильной ролью и паролем.

За дополнительной информацией по настройке баз данных в Rails обратитесь к документации.

Теперь, когда вы внесли изменения в config/database.yml, создайте базы данных для вашего приложения с помощью команды rails:

rails db:create

Когда Rails закончит процесс, вы получите сообщение:

Created database 'appname_development'
Created database 'appname_test'

Согласно выводу, команда создала базы данных development и test на сервере PostgreSQL.

Итак, у вас есть БД PostgreSQL, связанные с вашим приложением Rails. Давайте проверим, все ли работает правильно.

5: Тестирование настройки

Чтобы убедиться, что ваше приложение может использовать базу данных PostgreSQL, попробуйте запустить его в браузере.

Используя команду rails server, запустите ваше веб-приложение на встроенном веб-сервере Puma:

rails server --binding=127.0.0.1

Флаг —binding привязывает приложение к указанному IP. По умолчанию этот флаг привязывает Rails к 0.0.0.0, но при этом Rails будет прослушивать все интерфейсы. Более безопасно использовать 127.0.0.1, то есть localhost. По умолчанию приложение прослушивает порт 3000.

Как только приложение Rails запустится, ваша командная строка исчезнет, заменившись сообщением:

=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode…
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop

Чтобы проверить, работает ли ваше приложение, откройте на сервере новое окно терминала и с помощью команды curl отправьте запрос на 127.0.0.1:3000:

curl http://127.0.0.1:3000

Вы получите много выходных данных в формате HTML, в конце будет что-то вроде:


<strong>Rails version:</strong> 5.2.3<br />
<strong>Ruby version:</strong> 2.6.3 (x86_64-linux)
</p>
</section>
</div>
</body>
</html>

Если ваше приложение Rails находится на удаленном сервере и вы хотите получить к нему доступ через веб-браузер, проще всего связать его с внешним IP-адресом вашего сервера. Сначала откройте порт 3000 в брандмауэре:

sudo ufw allow 3000

Затем узнайте внешний IP-адрес сервера, выполнив следующую команду curl:

curl http://icanhazip.com

Эта команда выведет ваш внешний IP-адрес. Используйте его в команде rails server:

rails server --binding=server_public_IP

Теперь вы сможете получить доступ к приложению Rails в локальном веб-браузере через внешний IP-адрес сервера по порту 3000:

http://server_public_IP:3000

По этому адресу располагается приветственная страница Ruby on Rails:

Yay! You’re on Rails!

Это значит, что ваше приложение правильно настроено и взаимодействует с БД PostgreSQL.

Протестировав настройку, вы можете закрыть порт 3000 с помощью этой команды:

sudo ufw delete allow 3000

Заключение

Теперь вы умеете настраивать приложение Ruby on Rails для поддержки СУБД PostgreSQL на сервере Ubuntu 18.04. Больше мануалов по Ruby можно найти здесь.

Читайте также:

Tags: , , ,