Подготовка системы
apt install curl git gnupg2 nodejs
Устанавливаем RVM
Переходим на сайт rvm.io и смотрим команды установки:
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB curl -sSL https://get.rvm.io | bash -s stable
Добавляем пользователя в группу:
vim /etc/group
rvm:x:1001:ubuntu
Имя моего пользователя в системе — ubuntu
Затем от пользователя:
source /etc/profile.d/rvm.sh
Узнать версию RVM:
rvm --version
Посмотреть список доступных для установки версий Ruby:
rvm list known
Установим Ruby последней версии:
rvm install "ruby-2.5.1"
Список установленных Ruby версий и используемую по умолчанию можно узнать так:
rvm list
Посмотрим версию gem и обновим ее:
gem -v gem update --system
Установим Rails:
gem install rails
Создание приложения
Создадим тестовое приложение:
rails new example_app -T
Перейдем в директорию нашего приложения:
cd example_app
Создадим для теста index.html
vim public/index.html
Вставим туда следующее:
<!DOCTYPE html> <html> <head> <title>Ruby</title> </head> <body> Example Ruby App </body> </html>
Запускаем для теста на всех интерфейсах:
bundle exec rails s -p 3000 -b '0.0.0.0' => Booting Puma => Rails 5.2.2 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.12.0 (ruby 2.5.1-p57), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000 Use Ctrl-C to stop
Проверяем в браузере:
1.2.3.4:3000
Где 1.2.3.4 — IP адрес компьютера, где запущено приложение
Если на компьютере есть графическая оболочка, можно не указывать IP адрес при запуске приложения, и зайти в браузере по локалхосту. Так же без графики локалхост можно проверить курлом или консольным браузером
Можно останавливать приложение — Ctrl-C
Git
Находясь в корне нашего приложения инициализируем репозиторий:
git init Reinitialized existing Git repository in /home/ubuntu/heroku/example_app/.git/
Проверим статус:
git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore .ruby-version Gemfile Gemfile.lock README.md Rakefile app/ bin/ config.ru config/ db/ lib/ log/ package.json public/ storage/ tmp/ vendor/ nothing added to commit but untracked files present (use "git add" to track)
Добавим все файлы:
git add .
И делаем комит:
git commit -am "Add Ruby files to repo"
Проверим:
git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: .gitignore new file: .ruby-version new file: Gemfile new file: Gemfile.lock new file: README.md new file: Rakefile new file: app/assets/config/manifest.js new file: app/assets/images/.keep new file: app/assets/javascripts/application.js new file: app/assets/javascripts/cable.js new file: app/assets/javascripts/channels/.keep new file: app/assets/stylesheets/application.css new file: app/channels/application_cable/channel.rb new file: app/channels/application_cable/connection.rb new file: app/controllers/application_controller.rb new file: app/controllers/concerns/.keep new file: app/helpers/application_helper.rb new file: app/jobs/application_job.rb new file: app/mailers/application_mailer.rb new file: app/models/application_record.rb new file: app/models/concerns/.keep new file: app/views/layouts/application.html.erb new file: app/views/layouts/mailer.html.erb new file: app/views/layouts/mailer.text.erb new file: bin/bundle new file: bin/rails new file: bin/rake new file: bin/setup new file: bin/spring new file: bin/update new file: bin/yarn new file: config.ru new file: config/application.rb new file: config/boot.rb new file: config/cable.yml new file: config/credentials.yml.enc new file: config/database.yml new file: config/environment.rb new file: config/environments/development.rb new file: config/environments/production.rb new file: config/environments/test.rb new file: config/initializers/application_controller_renderer.rb new file: config/initializers/assets.rb new file: config/initializers/backtrace_silencers.rb new file: config/initializers/content_security_policy.rb new file: config/initializers/cookies_serializer.rb new file: config/initializers/filter_parameter_logging.rb new file: config/initializers/inflections.rb new file: config/initializers/mime_types.rb new file: config/initializers/wrap_parameters.rb new file: config/locales/en.yml new file: config/puma.rb new file: config/routes.rb new file: config/spring.rb new file: config/storage.yml new file: db/seeds.rb new file: lib/assets/.keep new file: lib/tasks/.keep new file: log/.keep new file: package.json new file: public/404.html new file: public/422.html new file: public/500.html new file: public/apple-touch-icon-precomposed.png new file: public/apple-touch-icon.png new file: public/favicon.ico new file: public/index.html new file: public/robots.txt new file: storage/.keep new file: tmp/.keep new file: vendor/.keep
Heroku
Регистрируемся на heroku.com и заходим в аккаунт.
Для удобства работы с Heroku установим их CLI
sudo snap install --classic heroku
Установку для дистрибутивов отличных от Ubuntu можно посмотреть на сайте Heroku
Проверяем:
heroku --version heroku/7.19.4 linux-x64 node-v11.3.0
Авторизуемся в Heroku CLI:
heroku login
Жмем любою клавишу и получаем URL авторизации, копируем ее в браузер, логинимся.
Создадим приложение на Heroku:
heroku create Creating app... done, ⬢ my-generated-app-name-83844 https://my-generated-app-name-83844.herokuapp.com/ | https://git.heroku.com/my-generated-app-name-83844.git
Теперь нужно в Gemfile заменить "sqlite3" на "postgres", иначе Heroku выдаст следующую ошибку:
remote: An error occurred while installing sqlite3 (1.3.13), and Bundler cannot remote: continue. remote: Make sure that `gem install sqlite3 -v '1.3.13'` succeeds before bundling. remote: remote: In Gemfile: remote: sqlite3 remote: remote: ! remote: ! Failed to install gems via Bundler. remote: ! Detected sqlite3 gem which is not supported on Heroku: remote: ! https://devcenter.heroku.com/articles/sqlite3 remote: ! remote: ! Push rejected, failed to compile Ruby app.
Открываем Gemfile
vim Gemfile
Находим в начале файла запись о sqlite3
gem 'sqlite3'
И переносим ее в блок "group :development, :test do"
Чтобы получилось следующее:
group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'sqlite3' end
Перед этим блоком добавим новый блок:
group :production do gem 'pg' end
Сохраняем изменения в файле
Переустанавливаем у себя без postgres
bundle install --without production
Добавляем файлы, делаем коммит и пушаем в Heroku:
git add . git commit -am "Heroku" git push heroku master
Проверим:
heroku open
В ответ получим URL, по которому можем проверить приложение на Heroku.