railway init
rails new simple-blog --api
cd ./simple-blog
bin/rails g scaffold post title body
bin/rails db:create
bin/rails db:migrate
bin/rails db:seed
curl http://127.0.0.1:3000/posts
# JSON ответ с постами
# Ручками создаём удаленный репозиторий на Github
# Либо можно сделать это с помощью утилиты Github cli https://cli.github.com/
# gh repo create
# https://github.com/mzsrn/mzsrn-simple-blog
git remote add origin https://github.com/username/simple-blog.git
git add *
git commit -m "initial commit"
git push --set-upstream origin main
ssh root@<server_ip>
# Дальнейшие команды выполняются на удалённом сервере
git clone https://github.com/username/simple-blog.git
bundle
bin/rails db:create
bin/rails db:migrate
bin/rails db:seed
# Ctrl+c прерывает текущий процесс
rails s -p 80 -b 0.0.0.0 # В браузере заходим по адресу http://<server_ip>/posts
# Выход с удалённой машины
logout # exit
# Дальнейшие команды выполняются на локальной машине
# После добавления Capistrano в зависимости и установки
cap -T
cap install
scp config/master.key root@<server_ip>://var/www/simple-blog/shared/config
cap staging deploy
cap staging deploy:seed
cap staging deploy:run
# Отобразить процесс, который занял порт 3000
lsof -wni tcp:3000
# https://guides.hexlet.io/ru/docker/
# https://hub.docker.com/
docker -v
docker build -t <username>/simple-blog .
docker login -u <username>
docker push <username>/simple-blog
ssh root@<server_ip>
docker pull <username>/simple-blog
docker images
docker run --rm -p 3001:3001 <username>/simple-blog
docker stop <hash>
docker rm <hash>
Dockerfile
FROM ruby:3.0.1
WORKDIR /home/app
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .
RUN chmod +x scripts/start.sh
CMD ["./scripts/start.sh"]
start.sh
#!/bin/bash
if [ -e /home/app ]; then
SEEDED_FILE=/home/app/.already_seeded
pushd /home/app
if [ -e $SEEDED_FILE ]; then
rake db:migrate || { echo "Can't migrate database"; exit 1; }
else
bin/rails db:create
bin/rails db:migrate || { echo "Can't migrate database"; exit 1; }
bin/rails db:seed || { echo "Can't seed database"; exit 1; }
echo 1 > $SEEDED_FILE
fi
rake tmp:clear || { echo "Can't clear cache"; }
popd
fi
bin/rails server -p 3001 -b 0.0.0.0
# https://devcenter.heroku.com/articles/heroku-cli
heroku login
heroku apps:create
git remote -v
# heroku https://git.heroku.com/<app_name>.git (fetch)
# heroku https://git.heroku.com/<app_name>.git (push)
# origin git@github.com:<username/<repo_name>.git (fetch)
# origin git@github.com:<username/<repo_name>.git (push)
# Добавление приложения в готовый репо (если приложение создано через web интерфейс)
либо heroku git:remote -a <app_name>
# Добавление сервиса базы данных Postgres к приложению на хероку
heroku addons:create heroku-postgresql:hobby-dev
# деплой выполняется по коммиту
git push heroku
# heroku run запускает команды в приложении Heroku
# heroku run bash
heroku run bin/rails db:migrate
heroku run bin/rails db:seed
# https://github.com/Hexlet/hexlet-cv - пример приложения, задеплоенного на Heroku
# Open: https://<app_name>.herokuapp.com/posts
Gemfile
# Gemfile
# Для хероку нужна версия ruby
ruby '3.0.2'
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]
# Для деплоя на Heroku sqlite3 не должен устанавливаться для продакшена
gem 'sqlite3', '~> 1.4'
end
group :production do
# Для продакшена
gem 'pg'
end
Heroku стал платным, но есть и другие бесплатные сервисы с аналогичными возможностями. Рассмотрим для примера сервис Railway.
# https://docs.railway.app/develop/cli
# Установка Railway CLI
curl -fsSL https://railway.app/install.sh | sh
railway login
# Проект можно создать в интерфейсе сервиса
# Но также можно создать командой
railway init
# Связать текущий локальный проект с созданным в сервисе
railway link
# Выполнить деплой
railway up
# Добавить базы данных в проект
railway add
# Проверить установленные переменные окружения
railway vars
Зарегистрируйтесь на Railway
Установите Railway CLI
Склонируйте к себе проект hexlet-cv и запустите локально, следуя инструкциям в README
Создайте проект в Railway
railway init
Задайте окружение для приложения в настройках проекта
RAILS_ENV=production
SECRET_KEY_BASE= # выполните команду rake secret для получения ключа
Создайте базу данных (Postgres). Вместе с ней будет создана переменная окружения DATABASE_URL
, которая содержит данные для подключения к базе данных. Проверьте, что нужные переменные добавились в проект
railway add
railway vars
Выполните деплой приложения на Railway выполняется командой
railway up
# See http://<app_name>.up.railway.app
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт
Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу