Ich werde vorstellen, wie mit Docker eine Rail 6-Umgebung erstellt wird. Webpack wurde von Rails6 eingeführt, und das Verfahren unterscheidet sich ein wenig von Rails5, daher habe ich dies berücksichtigt.
Offizielle Docker-Seite Quickstart: Compose and Rails
Docker3 Rails6.0.3 Ruby2.7.1 DB:PostgeSQL
Dieses Mal erstellen wir die Umgebung in einem Ordner namens "myapp". Wenn Sie den Namen ändern möchten, ändern Sie bitte "myapp" entsprechend.
Die von nun an zu erstellende Dateistruktur lautet wie folgt.
Dateiorganisation
myapp
--Dockerfile
--Gemfile
--Gemfile.lock
--entrypoint.sh
--docker-compose.yml
Erstellen Sie zunächst einen Ordner.
Terminal
$ mkdir myapp
$ cd myapp
1.1 Dockerfile
Terminal
$ touch Dockerfile
Dockerfile
FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
##Bei der Installation des Webpacks sind Knoten und Garn erforderlich
#Installieren Sie das Garnpaket-Verwaltungstool
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
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 && apt-get install -y yarn
# Node.installiere js
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs
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"]
1.2 Gemfile
Terminal
$ touch Gemfile
Gemfile
source 'https://rubygems.org'
gem 'rails', '~>6'
1.3 Gemfile.lock
Terminal
$ touch Gemfile.lock
Hier ist nichts aufgeführt.
1.4 entrypoint.sh
Terminal
$ touch entrypoint.sh
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
1.5 docker-compose.yml
Terminal
$ touch docker-compose.yml
docker-compose.yml
version: '3'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
#######hinzufügen#########################
environment:
POSTGRES_HOST_AUTH_METHOD: 'trust'
###################################
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
2.1 rails new
Terminal
$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle
Informationen zu Befehlsoptionen
--force
: Überschreibt, auch wenn die Datei vorhanden ist
--no-deps
: Starten Sie den verknüpften Dienst nicht
--database = postgresql
: DB gibt PostgreSQL an
--skip-bundle
: überspringe die Bundle-Installation (nach dem Erstellen der App)
2.2 docker-compose build Nachdem eine neue Gem-Datei erstellt wurde, verwenden Sie den folgenden Befehl, um die Installation zu bündeln.
Terminal
$ docker-compose build
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
#####hinzufügen#####
host: db
username: postgres
passowrd:
#############
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
Terminal
$ docker-compose up
Es ist in Ordnung, wenn der Container gestartet und eine Verbindung zum Server hergestellt wird. Ich habe noch keine Datenbank erstellt, daher wird der folgende Fehler angezeigt.
Da ich eine Verbindung zum Server herstellen konnte, habe ich eine Datenbank erstellt. Nach dem Trennen mit Strg + C.
Terminal
#Stoppen Sie Docker einmal
$ docker-compose stop
$ docker-compose down
#DB-Erstellung
$ docker-compose run web rake db:create
#Starten Sie Docker erneut
$ docker-compose up
Wenn Sie eine Verbindung zu [http: // localhost: 3000 /](http: // localhost: 3000 /) herstellen, können Sie bestätigen, dass der Vorgang erfolgreich gestartet wurde. Die Version ist Rails6, Ruby2.7.1 wie festgelegt.
Sie müssen Docker-Befehle verwenden, wenn Sie in Docker entwickeln.
$ docker-Compose Run Web Bundle Exec Rails Befehl
Beispiel
$ docker-compose run web bundle exec rails g model User
$ docker-compose run web bundle exec rails g controller Homepages index
$ docker-compose run web bundle exec rails g rspec:install
Offizielle Docker-Seite Quickstart: Compose and Rails Schritte zum Erstellen einer Ruby on Rails-Umgebung mit Docker [Rails 6-kompatibel] Ich war süchtig danach, mit Docker eine Rails 6-Entwicklungsumgebung zu erstellen Das Postgres Docker-Image wurde geändert und kann nicht mehr gestartet werden [Rails] ActiveRecord::NoDatabaseError [Docker]
Recommended Posts