Déployer des rails sur Docker vers heroku

Entraînez-vous à déployer sur heroku

Si vous créez une application Rails sur un conteneur Dcoker et utilisez Circleci pour effectuer un déploiement automatique à la fois Maintenant que je suis entré dans le labyrinthe, je vais revenir à l'origine. (2e)

Mon environnement

Ruby : 2.6.6 rails : 6.0.3.2 git : 2.23.0 heroku-cli : 7.42.13 darwin-x64 node-v12.16.2 Docker : 19.03.12

L'environnement de développement est MySQL J'essaierai de créer un environnement de production avec un modèle appelé PostgreSQL.

Préparez une application Rails sur votre Docker

Tout d'abord, créez un répertoire pour créer l'application et préparez les éléments nécessaires avec la commande tactile.

terminal


$ touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,entrypoint.sh}

Dockerfile


FROM ruby:2.6

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
    && apt-get update -qq \
    && apt-get install -y nodejs yarn \
    && mkdir /heroku_app
WORKDIR /heroku_app

COPY Gemfile //Gemfile
COPY Gemfile.lock /heroku_app/Gemfile.lock
RUN bundle install
COPY . /heroku_app

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3006

CMD ["rails", "server", "-b", "0.0.0.0"]

docker-compose.yml


version: '3'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - mysql-data:/var/lib/mysql:cached
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3006 -b '0.0.0.0'"
    volumes:
      - .:/heroku_app
    ports:
      - "3006:3000"
    depends_on:
      - db
    stdin_open: true
    tty: true
    command: bundle exec rails server -b 0.0.0.0
volumes:
  mysql-data:
    driver: local

Gemfile


source 'https://rubygems.org'
rails ‘6.0.3’

entrypoint.sh


#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /heroku_app/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "[email protected]"

Si vous pouvez préparer les 5 points ci-dessus, exécutez la commande suivante pour créer une application Rails.

terminal


$docker-compose run web rails new . --force --no-deps --database=mysql

En même temps, créez un contenu textuel.

$ docker-compose run web rails g scaffold blog title:string body:text
$ docker-compose run web rails db:migrate
$ docker-compose up -d

スクリーンショット 2020-09-09 0.00.04.png

Prêt à être déployé sur heroku

Ensuite, préparez postgreSQL pour la production avant de déployer l'application Rails sur heroku. --Paramétrage de config / database.yml --Ajouter pg à Gemfile --Paramètres dans config / environnements / deviropment.rb

Paramètres config / database.yml

config/database.yml


production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5

Paramètres Gemfile

Préparez un fichier gem pour l'environnement de production. Ajoutez pg au groupe de production. Aussi, déplacez MySQL dans group: development ,: test do` afin qu'il soit traité comme un environnement de développement.

Gemfile


group :production do
  gem 'pg', '~> 0.19.0'
end

Paramètres dans config / environnements / deviropment.rb

Il est unique à Rails6, mais il semble avoir une protection contre les attaques de liaison de détachement DNS, Vous devez mettre dans l'hôte.

config/enviroments/deviropment.rb


config.hosts << "radiant-springs-45017.herokuapp.com"

J'ai évoqué l'article suivant. https://qiita.com/kodai_0122/items/67c6d390f18698950440

Après l'édition, compilez.

terminal


docker-compose build
$docker-compose run web rails db:create
$docker-compose up -d

Après cela, tapez une commande et déployez sur Runrun et heroku.

$ docker-compose down #Si vous ne le déposez pas une fois, une erreur peut survenir
$ heroku login
$heroku créer le nom de l'application ou vide
$ heroku container:login
$ heroku container:push web
$ heroku adding:create heroku-postgresql:hobby-dev
$ heroku container:release web
$ heroku open

スクリーンショット 2020-09-09 10.44.50.png

la fin!

Je l'ai omis, mais une erreur s'est produite lors du déploiement sur heroku. Dans ce cas, j'ai tapé `` $ heroku logs --tail``` etc. sur le terminal pour vérifier l'erreur et la résoudre. Même si vous faites référence à un article réussi, une erreur peut survenir en raison de différences dans l'environnement, j'ai donc pensé qu'il était important de prendre l'habitude de vérifier à chaque fois pour comprendre.

Recommended Posts

Déployer des rails sur Docker vers heroku
Déployer sur Heroku [Ruby on Rails] Débutant
Comment déployer avec heroku
Comment déployer Bootstrap sur Rails
Déployer l'image Docker de Flask sur Heroku
heroku: docker: déployer
Étapes de déploiement sur Heroku
Déployer RAILS sur EC2
Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)
Présentation de l'application New Relic to Rails sur Heroku
[Rails MySQL] Comment réinitialiser la base de données sur heroku
Déployer le bot Line avec rails5 + Docker + Heroku Note
Comment déployer à partir d'une image Docker locale vers Heroku
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
Déployer sur Ruby on Rails Elastic beanstalk (changement d'autorisation IAM)
Comment déployer Laravel sur CentOS 7
Étapes pour exécuter Docker sur Mac
Exécutez puppeteer-core sur Heroku (édition Docker)
Comment déployer une application Java Servlet simple sur Heroku
Comment utiliser Ruby on Rails
déployer heroku
Pour exécuter JavaFX sur Docker
Déployez le fichier de guerre sur Heroku
Rails sur la procédure de construction de l'environnement Docker
Comment déployer l'application Rails sur AWS (résumé de l'article)
[Rails / Heroku / MySQL] Comment réinitialiser la base de données de l'application Rails sur Heroku
Utilisez Heroku × Rails pour rediriger vers votre propre domaine avec rack-rewrite
J'ai pu déployer l'application Docker + laravel + MySQL sur Heroku!
Déployez heroku avec Rails6 (Cloud9 + Ubuntu) + MySQL
Étapes pour publier une application sur Heroku
Essayez de déployer l'application Rails sur EC2-Part 2 (déploiement) -
Déployer des applications Web Java sur Heroku
[Ruby on Rails] Comment utiliser redirect_to
Bouton [Ruby on Rails] pour revenir en haut
Déployer un projet Eclipse basé sur Tomcat sur Heroku
Comment créer un environnement Rails 6 avec Docker
Liberty sur Docker
Activer le cache de construction de Docker dans GitHub Action et déployer sur Amazon ECS
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Rails Docker-Partie 1-
Rails Docker ~ Partie 2 ~
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Redmine sur Docker
Paramètres pour éviter les restrictions Docker Hub dans CircleCI