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

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

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

Требования

  • Сервер macOS с правами администратора (здесь мы используем macOS 10.14 Mojave).
  • Среда разработки Ruby on Rails на вашем сервере. Создать ее поможет мануал Установка Ruby on Rails с помощью rbenv в macOS. В мануале мы используем версию 2.6.3 для Ruby и 5.2.3 для Rails. Чтобы уточнить последние версии, проверьте официальные сайты Ruby и Rails.

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

Сначала нужно установить на свой сервер систему управления базами данных PostgreSQL. Существует много способов установить PostgreSQL на macOS, но здесь мы сделаем это с помощью Homebrew.

Существует несколько пакетов Homebrew для установки различных версий PostgreSQL. Чтобы установить последнюю версию, выполните следующую команду:

brew install postgresql

Если вы хотите загрузить определенную версию PostgreSQL, укажите в предыдущей команде нужный вам пакет вместо postgresql. Вы можете найти доступные пакеты на сайте Homebrew.

Затем включите двоичный файл PostgreSQL в переменную PATH, чтобы получить доступ к инструментам командной строки PostgreSQL (вместо 10 укажите номер версии, которую вы используете):

echo 'export PATH="/usr/local/opt/postgresql@10/bin:$PATH"' >> ~/.bash_profile

Чтобы изменения вступили в силу в текущей сессии, введите команду:

source ~/.bash_profile

Чтобы запустить сервис и добавить его в автозагрузку, введите такую команду:

brew services start postgresql@10

Убедитесь, что установка прошла успешно:

postgres -V

Вы получите такой вывод:

postgres (PostgreSQL) 10.9

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

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

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

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

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

createuser -P -d appname

Только что мы использовали createuser для создания роли по имени appname. Флаг –d передал этой роли право на создание новых баз данных..

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

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

psql postgres

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

psql (10.9)
Type "help" for help.
postgres=#

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

\password appname

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

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

\q

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

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

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

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

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

cd ~

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

rails new appname -d=postgresql

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

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

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

cd appname

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

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

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

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

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

echo ‘export APPNAME_DATABASE_PASSWORD=»PostgreSQL_Role_Password»‘ >> ~/.bash_profile

Эта команда записывает команду 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: appname

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 по умолчанию и не требует дополнительной настройки):

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-darwin18)
</p>
</section>
</div>
</body>
</html>

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

http://127.0.0.1:3000

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

Yay! You’re on Rails!

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

Заключение

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

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

Tags: , , , ,