Ich habe die Docker-Konstruktion von Rails + Postgresql als offiziell durchgeführt, aber es hat nicht funktioniert, also habe ich einige Teile repariert.

Annahme

macOS Catalina Docker for Mac 2.3.0.5

offiziell

Quickstart: Compose and Rails

Code

Dockerfile Als ich versuchte, der offiziellen Beschreibung zu folgen, bekam ich plötzlich verschiedene Fehler, also fügte ich etwas hinzu, das in Gugu fehlte. Außerdem ist der offizielle Rubin Version 2.5, aber ich habe ihn am 2020/11/1 zum neuesten 2.7.2 gemacht

offiziell

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

FROM ruby:2.7.2
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
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarn
#wie unten

Gemfile Offiziell ist die Version von Rails 6, aber ich habe sie am 2020/11/1 zum neuesten 6 gemacht

offiziell

source 'https://rubygems.org'
gem 'rails', '~>5'

source 'https://rubygems.org'
gem 'rails', '~> 6.0.3', '>= 6.0.3.4'

docker-compose.yml

Aus irgendeinem Grund wurde die DB nicht dauerhaft gemacht, selbst wenn ich den offiziellen und anderen Artikeln folgte, aber ich war verwirrt, aber ich löste es mit dieser Methode. https://github.com/docker/compose/issues/5012#issuecomment-316518185

(offiziell)docker-compose.yml


version: "3"
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

docker-compose.yml


version: '3'
services: 
  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      PGDATA: /var/postgres_data #hinzufügen
    volumes: 
      - ./tmp/db:/var/postgres_data #Fix
    ports:
      - "5432:5432"
  web: #das Gleiche

ports: "3001:3000"


 Geben Sie beim Herstellen einer Verbindung zum Rails-Server 3001 an.
 (Oder ändern Sie den Anschluss auf der Vorderseite)

## Verfahren
 In diesem Video finden Sie die grundlegende Vorgehensweise, da es leicht zu verstehen war.
 [[Rails-Umgebungskonstruktion] Umgebungskonstruktion mit Docker + Rails + MySQL (selbst Anfänger können in 30 Minuten fertig sein!)](Https://www.youtube.com/watch?v=Fq1PH0Gwi8I)
 * Dieses Video ist Rails5, Ruby2.5 mit MySQL anstelle von PostgresQL

## DB-Verbindung

 * Sie können keine Verbindung herstellen, es sei denn, der Container wird gestartet.
 ![スクリーンショット 2020-11-03 9.55.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566220/2a8fc39b-a393-d577-f135-21c61a2d8697.png)

 `Name` Freiheit
 Legen Sie fest, was in POSTGRES_USER von `User` docker-compose.yml beschrieben ist
 Legen Sie fest, was in POSTGRES_PASSWORD unter `Password` docker-compose.yml beschrieben ist
 Legen Sie fest, was in `Entwicklung: Datenbank` von` Datenbank`` myapp / config / database.yml` beschrieben ist


Recommended Posts

Ich habe die Docker-Konstruktion von Rails + Postgresql als offiziell durchgeführt, aber es hat nicht funktioniert, also habe ich einige Teile repariert.
Ich habe die Bedeutung von DI oder @Autowired oder Injektion nicht verstanden, also habe ich nachgeschlagen.
[Aufbau der Rails & Docker & MySQL-Umgebung] Ich habe den Container gestartet, kann aber MySQL nicht finden ...?
Ich habe es verwendet, ohne die O / R-Zuordnung der Schienen zu kennen, also habe ich es überprüft.