Как использовать PostgreSQL в вашем приложении Ruby on Rails на Ubuntu 20.04

Введение

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

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

Предварительные требования

Для этого руководства требуется следующее:

Шаг 1 – Установка PostgreSQL

Для настройки Ruby on Rails с использованием PostgreSQL в качестве базы данных для вашего веб-приложения сначала установите базу данных на свой сервер.

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

  1. sudo apt update

Затем установите PostgreSQL и его библиотеки разработки:

  1. 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 20.04:

  1. sudo -u postgres createuser -s sammy -P

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

Вы используете createuser для создания роли с именем sammy (или предпочитаемым вами именем пользователя). Флаг -s наделяет этого пользователя привилегиями суперпользователя, а sudo -u позволяет запускать команду от имени учётной записи postgres, которая автоматически создаётся при установке PostgreSQL.

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

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

  1. sudo -u postgres psql

Вы получите следующий вывод, а также приглашение консоли PostgreSQL:

Output
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1)) Type "help" for help. postgres=#

Консоль PostgreSQL обозначается приглашением postgres=#. На приглашении PostgreSQL введите эту команду, чтобы установить пароль для новой роли базы данных, заменив выделенное имя на то, которое вы создали:

  1. \password sammy

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

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

  1. \q

Ваше обычное приглашение теперь снова появится.

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

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

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

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

  1. cd ~

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

  1. rails new appname -d=postgresql

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

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

Затем перейдите в директорию вашего приложения:

  1. cd appname

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

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

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

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

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

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

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

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

  1. source ~/.bashrc

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

Откройте файл конфигурации базы данных вашего приложения в вашем предпочитаемом текстовом редакторе. Этот учебник будет использовать nano:

  1. nano config/database.yml

В разделе default найдите строку, которая говорит pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> и добавьте следующие выделенные строки, заполнив ваши учетные данные и переменную среды, которую вы создали. Это должно выглядеть примерно так:

config/database.yml
...
default: &default
  adapter: postgresql
  encoding: unicode
  # Для получения подробной информации о пуле подключений обратитесь к руководству по конфигурации Rails
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: sammy
password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

development:
  <<: *default
  database: appname_development
...

Это обновление позволит приложению Rails запускать базу данных с правильной ролью и паролем. Сохраните и выйдите, нажав CTRL + x, Y, затем ENTER.

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

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

  1. rails db:create

После создания базы данных Rails вы получите следующий вывод:

Output
Created database 'appname_development' Created database 'appname_test'

Как указывает вывод, эта команда создала базу данных development и test на вашем сервере PostgreSQL.

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

Шаг 5 – Тестирование вашей конфигурации

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

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

  1. rails server --binding=127.0.0.1

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

Когда ваше приложение Rails запущено, ваш приглашение командной строки исчезнет, заменено на этот вывод:

Output
=> Booting Puma => Rails 7.0.4 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version") * 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:

  1. curl http://127.0.0.1:3000

Вы получите много HTML-кода в ответе, заканчивающегося примерно так:

Output
... <strong>Rails version:</strong> 7.0.4<br /> <strong>Ruby version:</strong> 3.1.2 (x86_64-linux) </p> </section> </div> </body> </html>

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

  1. sudo ufw allow 3000

Затем найдите общедоступный IP-адрес вашего сервера. Вы можете сделать это, запустив следующую команду curl:

  1. curl http://icanhazip.com

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

  1. rails server --binding=server_public_IP

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

http://server_public_IP:3000

По этому URL вы найдете страницу Ruby on Rails:

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

После тестирования конфигурации, если вы хотите закрыть порт 3000, используйте следующую команду.

  1. sudo ufw delete allow 3000

Заключение

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

Для получения дополнительной информации о выборе базы данных для вашего приложения ознакомьтесь с нашим руководством по различиям и областям применения SQLite, PostgreSQL и MySQL. Если вы хотите узнать больше о том, как использовать базы данных, ознакомьтесь с нашей статьей Введение в запросы в PostgreSQL или изучите продукт Управляемые базы данных от DigitalOcean.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-ruby-on-rails-application-on-ubuntu-20-04