Как запустить rails на ubuntu

Обновлено: 04.07.2024

Ruby on Rails (RoR) — это платформа для веб-приложений с открытым исходным кодом, опубликованная под лицензией MIT. Она является серверным веб-приложением и следует концепции MVC (Model-View-Controller). Rails предоставляет заготовки для создания баз данных, веб-служб и веб-страниц. Более 3000 разработчиков внесли свой вклад в разработку среды Rails. Существует множество известных веб-приложений созданных на основе Rails, таких как Github, Airbnb, Soundcloud и т. д.

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

Установка ruby on rails на Ubuntu 18.04

Шаг 1. Установка Ruby Version Manager

RVM (Ruby Version Manager) — это инструмент командной строки, основанный на Bash и Ruby и предназначенный для управления установкой ruby. RVM позволяет устанавливать и настраивать несколько версий ruby в одной системе.

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

Установите стабильную версию rvm, выполните команду ниже:

Команда автоматически установит необходимые пакеты и инсталлирует последнюю стабильную версию rvm. После завершения установки выполните следующую команду:


Теперь мы можно использовать команду rvm для управления версией ruby:

Шаг 2. Установка Ruby последней версии

Последней версией ruby на данный момент считается Ruby 2.5.1, и она будет автоматически установлена во время инсталляции rvm, если в системе нет пакета ruby. Далее мы настроим версию ruby в операционной системе Ubuntu. Обновите rvm до последней стабильной версии.

rvm get stable --autolibs=enable

usermod -a -G rvm root

Теперь проверим все доступные версии ruby:

Мы получим много доступных версий ruby и установим последнюю стабильную версию Ruby с помощью команды rvm, как показано ниже.

rvm install ruby-2.5.1


После завершения установки сделайте ruby 2.5.1 версией по умолчанию:

rvm --default use ruby-2.5.1

Можете проверить версию ruby:

Теперь версия 2.5.1 используется по умолчанию.

Шаг 3 - Установка Nodejs

Ruby on Rails требует времени для компиляции конвейера ресурсов Rails на JavaScript. Для разработчиков на Rails в Ubuntu Linux лучше всего установить и использовать Nodejs в качестве среды выполнения Javascript. Добавим репозиторий nodejs Node в систему.

После этого установите последнюю версию nodejs 10 и дополнительные пакеты, используя команду apt.

sudo apt install -y nodejs
sudo apt install gcc g++ make

Шаг 4 - Настройка Ruby Gem

RubyGems - менеджер пакетов Ruby, поставляемый в виде инструмента командной строки gem. Он автоматически устанавливается при установке Ruby в системе. Обновим gem до последней версии и проверим его:

gem update --system
gem -v

Замечание: Можно отключить установку документации по каждому пакету ruby. Просто выполните:

echo "gem: --no-document" >>

Шаг 5. Установка Ruby on Rails

В этом руководстве мы будем использовать последнюю стабильную версию Ruby on Rails 5.2.0. Установите Rails Ubuntu с помощью менеджера пакетов gem ruby командой:

gem install rails -v 5.2.0

После завершения установки можете проверить версию rails.


Шаг 6. Настройка PostgreSQL для Rails

По умолчанию Ruby on Rails использует базу данных SQLite. Кроме этого он поддерживает множество систем баз данных, включая MySQL, SQLite и PostgreSQL. Мы будем использовать PostgreSQL. Установите базу данных PostgreSQL, используя команду apt:

sudo apt install postgresql postgresql-contrib libpq-dev -y

После завершения установки запустите службу Postgres и разрешите ей каждый раз запускаться при загрузке системы:

systemctl start postgresql
systemctl enable postgresql

Далее настройте пароль для пользователя postgres и создайте пользователя для установки Rails. Для этого войдите в систему от имени пользователя 'postgres' и запустите оболочку postgres:

su - postgres
psql

Для изменения пароля postgres выполните:

Теперь создайте нового пользователя для установки rails, например, с именем rails_dev, с привилегией создания базы данных и паролем «aqwe123». Для этого выполните такой запрос:

create role rails_dev with createdb login password 'aqwe123';

Теперь проверим все доступные роли в системе.

Вы увидите пользователя rails_dev в списке.


На этом установка и настройка PostgreSQL для Rails Development завершена.

Шаг 7. Первое приложение Rails

Ruby on Rails имеет команду rails, предназначенную для настройки вашего приложения. Создадим новый проект myapp с базой данных по умолчанию PostgreSQL, выполнив команду rails, как показано ниже.

rails new myapp -d postgresql

После выполнения команды появится каталог «myapp», перейдите в этот каталог и отредактируйте файл конфигурации базы данных database.yml с помощью редактора vim.

cd myapp/
vim config/database.yml

В этом файле есть такие разделы: development, testing и production. В разделе development раскомментируйте строки указанные ниже и измените их значение на данные, которые вы использовали для создания пользователя postgresql.

username: rails_dev
password: aqwe123
host: localhost
port 5423

Для раздела testing сделайте аналогичную операцию. Сохраните изменения и закройте редактор. Теперь создайте базу данных и убедитесь что нет ошибок:

rails db:setup
rails db:migrate

Когда все настройки завершены, запустите веб-сервер puma rails, используя приведенную ниже команду:

rails s -b 192.168.1.10 -p 8080

Первый проект rails будет запущен на IP-адресе «192.168.1.10» с портом 8080.


Откройте веб-браузер и введите IP-адрес сервера в адресной строке:

Вы получите домашнюю страницу проекта rails по умолчанию, как показано ниже.


Далее создадим простое CRUD приложение с базой данных PostgreSQL на Rails. Выполните такие команды:

rails g scaffold Post title:string body:text
rake db:migrate

И снова запустите сервер puma:

rails s -b 192.168.1.10 -p 8080

А потом откройте такой адрес в браузере:

Мы получили простую форму CRUD:


На этом установка Ruby on Rails на Ubuntu 18.04 с базой данных Postgresql успешно завершена.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

На создание этой статьи меня толкнула недавняя публикация о деплое. В приведённой статье описан способ разворачивания проекта на основе rbenv, я же опишу ситуацию с rvm и настройкой upstart.

Задачи и требования

  • ОС Ubuntu LTS 14.04;
  • Веб-сервер Nginx;
  • Сервер приложения Puma;
  • Использование RVM для установки ruby требуемой версии;
  • Автоматический запуск приложения при запуске VPS-сервера, возможность управлять приложением как службой;
  • Автоматизация процесса деплоя с помощью mina;

Почему puma, а не unicorn или passenger?
О пуме я слышал неплохие отзывы, а у unicron страшненький сайт. Passenger, на мой взгляд, нарушает принцип единственной обязанности — я хочу иметь веб-сервер и приложение-сервер.

Почему RVM?
Я к нему привык — у меня он установлен на локальной машине, хочу его видеть и на production.

Почему mina?
Она действительно проще чем capistrano и при этом быстрее. Скорость достигается за счёт того, что для каждой задачи capistrano создаёт отдельное ssh-соединение. Mina же формирует shell-скрипт и выполняет его в рамках одного соединения.

  1. Убедиться, что приложение корректно запускается (пока без автоматизации);
  2. Настроить сервер так, чтобы наше rails-приложение работало как полноценная служба;
  3. На основе этого настроить автоматизированное разворачивание с помощью mina.

Первый запуск

На сервере создан пользователь webapp, от имени которого будет работать наше приложение. Установлен rvm (в данном примере только для пользователя webapp), ruby нужной нам версии, nginx и прочее. В Gemfile присутствует следующая строчка:

Предварительная настройка mina

Добавим в Gemfile следующую строчку:

Затем сгенерируем конфигурационный файл командой:

После чего приведём созданный файл config/deploy.rb к следующему виду:

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

Также хочу отметить, что приведённый файл настройки mina я не добавляю в контроль версий.

После чего запустим команду:

И получим необходимую структуру папок на сервере, а также конфигурационные файлы, которые необходимо заполнить корректными данными. Предполагается, что данные файлы вы не будете добавлять в контроль версий, а хранить исключительно на сервере. Ниже приведён пример минимальной конфигурации для puma.

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

Для заметки же достаточно создать в приложении файлик config/puma.sample.rb с примером.

Теперь же запустим «разворачивание» нашего приложения:

После выполнения данной команды, на сервере появиться символическая ссылка /home/webapp/awesome/current на папку с кодом нашего проекта.

Настройка nginx
Создадим файл /etc/nginx/sites-available/awesome со следующим содержимым:

После чего создадим символическую ссылку:

И перезапустим nginx:

Ручной запуск приложения
Теперь подготовим и запустим наш проект.
Подготавливаем:

Открываем проект в браузере — всё должно работать.

Приложение как служба

Для того, чтобы приложение работало как служба и запускалось при старте/перезагрузке системы, нужно создать init.d-скрипт или upstart-конфигурацию.

Я выбрал upstart, потому как получаемый файл выходит намного короче и проще для восприятия.

Для того, чтобы корректно подружить upstart и rvm, создаём обётку для исполняемых файлов наших гемов:

После чего создаём upstart-конфигурацию /etc/init/awesome.conf:

И теперь мы можем делать так:

Итоговая автоматизация

Так как деплой будет происходить от имени пользователя webapp, а для перезапуска службы нам нужны права суперпользователя, добавим соответствующую строчку в sudoers.

И снова mina
В подобных случаях mina предлагает использовать собственный модуль mina/rvm, однако rvm предоставляет нам возможность создавать псевдонимы для версий ruby и gemset-ов — wrapper-ы.

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

Также добавим задачу для перезапуска сервера:

Добавив всё это и раскомментировав необходимые строки в задаче deploy, получим следующее:

Всё готово!
Теперь можем ещё раз запустить разворачивание проекта и посмотреть на результат:

Альтернативы

В качестве альтернативы можно рассматривать puma-jungle.
Это шаблоны upstart и init.d скриптов, которые корректно отрабатывают с rbenv, rvm и прочими менеджерами версий.

Можно положить их в контроль версий, а можно создавать во время деплоя через mina. Также вам придётся использовать библиотеку mina/rvm и создать задачу для установки корректной версии руби и гемсета.

В этой маленькой статье, которую с удовольствием прочитал бы сам неделю назад, я попытался собрать все вещи, которые понадобились бы человеку, задумай он «с нуля» написать приложение на RoR. То есть не углубляясь ни в одну из областей, описать необходимый минимум действий, чтобы установить, настроить и написать своё первое приложение.Здесь собрано, как мне кажется, всё, что нужно и я надеюсь этот текст сэкономит кому-нибудь несколько часов поиска в интернете). Сам изучаю RoR вторую неделю, так что не судите строго).

Установка.

Просто и быстро ror ставится через rvm c rvm.io.


*$HOME в дальнейшем.
После этого в $HOME/.bash_profile должна появиться строчка:

и при каждом открытии консоли rvm будет подгружаться, но у меня этого не случилось — пришлось ещё в $HOME/bashrc прописывать:

Проверка на успешность создания

должна вернуть более подробную информацию, вроде

В процессе установки я случайно установил несколько версий, что потом доставило некоторые неприятности). Посмотреть список установленных версий руби можно так:
>rvm list
Если версий несколько, то текущая будет помечена "=>", дефолтная — "*", а текущая и дефолтная — "=*". Поменять на нужную используемую версию можно так:

Чтобы поменять дефолтную версию руби пишем:

Создание проекта.

Теперь можно перейти непосредственно к созданию проекта. Создаём папку $HOME/ROR/tickets, заходим в неё и делаем следующее.

При создании проекта будут сгенерированы все необходимые директории(app,config,db,log и т.п.) и конфигурационные файлы в указанной папке. Для работы небольшого тестового проекта нам потребуется, в моём случае, база данных PostgreSQL, пара gem-ов(библиотек) и запущенный rails сервер).
Для запуска сервера нужно, находясь в корне папки с созданным проектом запустить команду:

где s — команда запуска сервера(server), а -p 3000 -номер порта(port), по которому будет доступен проект. Что бы запустить консоль, нужно набрать:

где с- сокращение от console
Список всех команд можно посмотреть, набрав
>rails --h. Теперь по адресу localhost:3000 мы увидем стартовую страницу проекта. Так же можно запускать любое количество серверов других проектов на других, не занятых портах. В ходе работы. у меня в один момент по какой-то неведомой мне причине возникла проблема с запуском сервера — выдавалась ошибка, что сервер уже запущен — для её решения нужно просто удалить файл $HOME/ROR/tickets/config/tmp/pids/server.pid и запустить сервер ещё раз.

База данных.

Чтобы работать с постгресом, добавляем в конец файла Gemfile, который должен находится в корне проекта, строчку
>gem 'pg'
сохраняем файл и делаем

его мы делаем каждый раз, когда вносим изменения в Gemfile, а потом ещё и перезапускаем сервер. Чтобы сюда больше не возвращаться, сразу же добавляем и
>gem 'haml-rails' для быстрой и удобной(после того как привыкнешь)) разметки шаблонов-представлений. Теперь отредактируем атрибуты конекта к постгресу в файле database.yml. Он находится в папке $HOME/ROR/tickets/config/ и должен будет содержать такой блок:

с нужными пользователем и именем БД, у меня это tickets и tickets соответственно).

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

Модель.

где g- сокращение от generate
Название модели пишем в единственном числе — таблица в бд будет во множественном. Эта команда создаст файлы модели и миграции в $HOME/ROR/tickets/app/models/user.rb и $HOME/ROR/tickets/app/db/migrate/20130425081208_create_users.rb. все файлы контроллеров и моделей имеют расширение .rb, представлений — .html.haml(в нашем случае использования haml). Посредством миграции мы будем управлять работой с таблицами в БД через консоль, что весьма удобно(опять таки, когда привыкаешь), так же ониобеспечивают простоту переноса приложения, на другой сервер, например. Добавляем нужные поля:

Создаём два метода — up и down, которые используются по умолчанию функциями работы с миграциями — они, соответственно, создают и удаляют нашу таблицу. Названия типы данных будут зависеть от используемой БД. Первичный ключ создаётся по умолчанию и будет называться id, но его можно задать и явно:

А если мы не хотим создавать первмчный ключ вообще, пишем так:

Сохраняем и пишем в консоле:

В результате действия этой команды выполняются все невыполненные методы up из файлов миграций в директории $HOME/ROR/tickets/app/db/migrate/. Все сведения о состоянии таблиц можно посмотреть в файле $HOME/ROR/tickets/app/db/shema.rb.

Запускает метод down последней выполненной миграции, в результате чего таблица удаляется из БД. Чтобы откатить больше миграций, нужно добавить к команде rollback параметр STEP:

эта команда откатит три последние миграции. Посмотреть статус всех миграций в консоли:

Если нужно запустить какой-то определённый метод из определённой миграции, то добавляем параметр VERSION:

В файле модели ($HOME/ROR/tickets/app/models/user.rb) нам пока нужно сделать только одно — определить поля таблицы, которые будут доступны для изменения из контроллера, в целях безопасности, как я понимаю). Для этого пишем в нём следующее:

Кстати, синтаксис haml очень чувствителен к табуляциям — их очень хорошо можно отслеживать в редакторе, которым пользуюсь я — Sublime Text.

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

эта команда не сделает запись в таблицу, но создаст объект руюи в памяти со всеми установленными атрибутами. А теперь сделаем запись:

в случае успеха должна вернуть true. Запись можно создать и одной командой — create:

Чтобы проверить есть ли объект в БД, можно использовать find:

вернёт объект или ошибку: «ActiveRecord::RecordNotFound: Couldn't find User with а так же и сам сгенерированный sql-запрос к БД.
Искать можно и по конкретным полям:

Ещё несколько удобных методов, которые наверняка пригодятся на первых порах:
>User.first и User.last -вернут первую и последнюю запись в таблице соответственно, а User.all вернёт массив всех объектов таблицы.

Контроллер.

В результате этой команды будут созданы файл контроллера: $HOME/ROR/tickets/app/controllers/users_controller.rb и директория для представлений:
$HOME/ROR/tickets/app/views/users/. Каждому методу котроллера будет соответствовать представление с таким же названием, в этой папке. Их можно создавать вручную, а можно и сразу при создании контроллера:

В этом случае файлы представлений создадутся автоматически в папке $HOME/ROR/tickets/app/views/users/ и будут называться (если вы не забыли подключить haml) index.html.haml и list.html.haml. Удалить контроллер можно так:

где d- сокращение от destroy
Определять метод index, который создаётся по умолчанию, не обязательно. Содержимое нашего контроллера users будет таким:

В users_list будет массив объектов пользователей, которых мы по идее уже понадобавляли из консоли, а "@" означает, что переменная будет передана в шаблон.

Представление.

Теперь создаёи представление, я просто создал этот файл руками в нужной директории:
$HOME/ROR/tickets/app/views/users/list.html.haml
Документацию по HAML можно почитать здесь (http://haml.info/tutorial.html), а пока набо понадобится минимум знаний о нём, например то, что вместо открывающего и закрывающего тега в нём используется "%tag". То есть после рендеринга шаблона, содержащего %html, мы получим страницу с . Уровень вложенности задаётся табуляцией, атрибуты тегов пишутся «хешеобразно» в фигурных скобках: превратится в , а содержимое — через пробел: %td test. Таким образом содержимое нашего представления:

Дефис — исполняемый код в шаблоне. Здесь мы проходимся по массиву объектов и выводим в цикле его методы — поля name и role и id.

Все представления «оборачиваются» в главный шаблон, который находится в $HOME/ROR/tickets/app/views/layouts/application.html.haml
Удаляем всё, что в нём есть и делаем его максимально простым:

Содержимое всех наших сгенерированных шаблонов подставляется вместо =yield. Главное не ошибится с уровнями вложенности, меня это поначалу очень напрягало).

Ruby - это один из достаточно популярных языков программирования, на котором уже разработано множество системных программ и веб-сайтов. На Ruby написаны некоторые системные скрипты Linux, а также программа для тестирования на проникновение Metasploit. Из веб-технологий очень большую популярность завоевал стек Ruby On Rails, который делает разработку сайтов очень простой.

В этой статье мы рассмотрим как выполняется установка Ruby Ubuntu и более поздних версиях несколькими способами. Для этого вы можете использовать официальные репозитории, программу RVM или же репозиторий PPA с более новой версией.

Установка Ruby с помощью RVM

Сначала давайте рассмотрим как выполняется установка Ruby с помощью RVM. RVM или Ruby Version Manager - это утилита обеспечивающая эффективную установку, обновление и удаление новых версий Ruby и фреймворка Ruby on Rails. Чтобы установить RVM нам понадобиться утилита curl:

sudo apt install curl


Также нужно импортировать в систему открытый ключ:


Теперь загрузим и запустим установщик RVM:


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

Настройка менеджера версий почти завершена и мы можем перейти к установке Ruby, сначала установим нужные зависимости в систему:


Дальше нам нужно посмотреть какие версии Ruby доступны, для этого используйте такую команду:

Теперь можно установить нужную вам версию Ruby, вы даже можете управлять несколькими версиями Ruby в системе с помощью этой утилиты. Например, давайте установим версию 2.4:

После того как установка ruby завершиться нужно указать версию, которую следует использовать по умолчанию:

rvm use 2.4 --default


Осталось проверить версию:

Если вам также нужна платформа разработки веб-приложений, то вы можете ее очень просто установить с помощью утилиты gem. Установка Ruby on Rails на Ubuntu:

gem install rails


Также можно вручную указать версию, которую нужно установить:

gem install rails --version=4.2.5

Вот и все, установка Ruby Ubuntu полностью завершена.

Выводы

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

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