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)
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.
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 "$@"
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
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
config/database.yml
production:
<<: *default
adapter: postgresql
encoding: unicode
pool: 5
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
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
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