Stellen Sie Rails on Docker für Heroku bereit

Übe den Einsatz in Heroku

Wenn Sie eine Rails-App auf einem Dcoker-Container erstellen und Circleci verwenden, um die automatische Bereitstellung sofort durchzuführen Nachdem ich das Labyrinth betreten habe, werde ich zum Ursprung zurückkehren. (2.)

Meine Umgebung

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

Entwicklungsumgebung ist MySQL Ich werde versuchen, eine Produktionsumgebung mit einem Muster namens PostgreSQL zu erstellen.

Bereiten Sie eine Rails-App auf Ihrem Docker vor

Erstellen Sie zunächst ein Verzeichnis zum Erstellen der Anwendung und bereiten Sie die erforderlichen Elemente mit dem dortigen Befehl touch vor.

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 "$@"

Wenn Sie die obigen 5 Punkte vorbereiten können, führen Sie den folgenden Befehl aus, um eine Rails-Anwendung zu erstellen.

terminal


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

Erstellen Sie gleichzeitig einen Textinhalt.

$ 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

Bereit für Heroku

Bereiten Sie anschließend postgreSQL für die Produktion vor, bevor Sie die Rails-App für heroku bereitstellen.

config / database.yml Einstellungen

config/database.yml


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

Gemfile-Einstellungen

Bereiten Sie eine Gem-Datei für die Produktionsumgebung vor. Fügen Sie der Produktionsgruppe pg hinzu. Verschieben Sie MySQL außerdem in `group: development ,: test do `, damit es als Entwicklungsumgebung behandelt wird.

Gemfile


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

Einstellungen in config / environment / deviropment.rb

Es ist einzigartig für Rails6, scheint jedoch vor DNS-Ablösungsbindungsangriffen geschützt zu sein. Sie müssen den Host eingeben.

config/enviroments/deviropment.rb


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

Ich habe auf den folgenden Artikel verwiesen. https://qiita.com/kodai_0122/items/67c6d390f18698950440

Nach dem Bearbeiten erstellen.

terminal


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

Geben Sie danach einen Befehl ein und stellen Sie ihn für Runrun und Heroku bereit.

$ docker-compose down #Wenn Sie es nicht einmal löschen, kann ein Fehler auftreten
$ heroku login
$Heroku erstellen App-Namen oder leer
$ 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

das Ende!

Ich habe es weggelassen, aber beim Bereitstellen auf Heroku ist ein Fehler aufgetreten. In diesem Fall habe ich "` $ heroku logs --tail`` "usw. auf dem Terminal eingegeben, um den Fehler zu überprüfen und zu beheben. Selbst wenn Sie sich auf einen erfolgreichen Artikel beziehen, kann aufgrund von Unterschieden in der Umgebung ein Fehler auftreten. Daher hielt ich es für wichtig, sich daran zu gewöhnen, jedes Mal nach dem Verständnis zu suchen.

Recommended Posts

Stellen Sie Rails on Docker für Heroku bereit
Bereitstellen für Heroku [Ruby on Rails] Anfänger
Wie man mit Heroku einsetzt
So stellen Sie Bootstrap auf Rails bereit
Stellen Sie das Docker-Image von Flask in Heroku bereit
Heroku: Docker: Bereitstellen
Schritte zur Bereitstellung in Heroku
Stellen Sie RAILS auf EC2 bereit
Bereitstellung auf Ruby on Rails Elastic Beanstalk (EB-Bereitstellung)
Einführung der New Relic to Rails App auf Heroku
[Rails MySQL] So setzen Sie die Datenbank auf Heroku zurück
Stellen Sie Line Bot mit Rails5 + Docker + Heroku Note bereit
Bereitstellen von einem lokalen Docker-Image auf Heroku
Bereitstellen auf Ruby on Rails Elastische Bohnenstange (Umgebungskonstruktion)
Bereitstellung auf Ruby on Rails Elastic Beanstalk (Änderung der IAM-Berechtigung)
So stellen Sie Laravel für CentOS 7 bereit
Schritte zum Ausführen von Docker auf einem Mac
Führen Sie Puppeteer-Core auf Heroku aus (Docker Edition)
So stellen Sie eine einfache Java-Servlet-App auf Heroku bereit
Verwendung von Ruby on Rails
Heroku entfalten
So führen Sie JavaFX unter Docker aus
Stellen Sie die Kriegsdatei auf Heroku bereit
Konstruktionsverfahren für Rails on Docker-Umgebungen
So stellen Sie die Rails-Anwendung in AWS bereit (Artikelzusammenfassung)
[Rails / Heroku / MySQL] So setzen Sie die Datenbank der Rails-App auf Heroku zurück
Verwenden Sie Heroku × Rails, um mit Rack-Rewrite zu Ihrer eigenen Domain umzuleiten
Ich konnte die Docker + Laravel + MySQL App für Heroku bereitstellen!
Stellen Sie Heroku mit Rails6 (Cloud9 + Ubuntu) + MySQL bereit
Schritte zum Veröffentlichen einer Anwendung auf Heroku
Versuchen Sie, die Rails-App für EC2-Teil 2 (Bereitstellung) bereitzustellen.
Stellen Sie eine Java-Web-App für Heroku bereit
[Ruby on Rails] Verwendung von redirect_to
[Ruby on Rails] Schaltfläche, um nach oben zurückzukehren
Stellen Sie ein Tomcat-basiertes Eclipse-Projekt für Heroku bereit
So erstellen Sie eine Rails 6-Umgebung mit Docker
Freiheit auf Docker
Aktivieren Sie den Build-Cache von Docker in GitHub Action und stellen Sie ihn auf Amazon ECS bereit
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
Rails Docker-Teil 1-
Rails Docker ~ Teil 2 ~
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
Redmine auf Docker
Einstellungen zur Vermeidung von Docker Hub-Einschränkungen in CircleCI