Erstellen Sie mit Docker eine Umgebung zum Lesen des Quellcodes von redmine. Das Ziel ist wie folgt.
Der Grund für die Erstellung der Betriebsumgebung besteht darin, dass wir den Code lesen und gleichzeitig das tatsächliche Anwendungsverhalten und den Codeinhalt in unseren Köpfen verknüpfen möchten.
Wir glauben, dass das Lesen von Code, der von Menschen geschrieben wurde, zu neuen Entdeckungen und zum Lernen führen wird. In meinem Fall habe ich mir heutzutage Sorgen darüber gemacht, wie man Klassen aufteilt, benennt, Testcode schreibt und Fehler behandelt. Deshalb bin ich motiviert, die Anzahl der Abhebungen zu erhöhen.
Ich habe mich aus folgenden Gründen für Redmine entschieden.
Wir werden unter Bezugnahme auf Folgendes fortfahren.
Erstellen Sie die folgenden Dateien direkt im Verzeichnis "redmine".
Der Inhalt der Datei ist wie folgt.
Dockerfile
Da Redmines Gemfile auf "config / database.yml" verweist, müssen Sie "COPY. / Redmine" und dann "Bundle-Installation" ausführen. Übrigens ändere ich mit Referenz den zu installierenden Edelstein entsprechend der zu verwendenden Datenbank. Wenn beispielsweise die Verbindungsinformationen von postgres in "config / database.yml" geschrieben sind, wird das Juwel für die Verbindung mit postgres installiert. Ich hatte nicht viel Ahnung, wie ich den in der Gemfile angegebenen Edelstein dynamisch ändern kann, daher habe ich das Gefühl, dass ich bereits gelernt habe.
Dockerfile
FROM ruby:2.5
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
RUN mkdir /redmine
WORKDIR /redmine
COPY Gemfile /redmine/Gemfile
COPY Gemfile.lock /redmine/Gemfile.lock
COPY . /redmine
RUN bundle install
# 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"]
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /redmine/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
docker-compose.yml
Das auskommentierte ist die Einstellung für ruby-debug / ruby-debug-ide. Ich habe es eingeführt, aber der Vorgang war in meiner Umgebung nicht stabil, daher versuche ich, es nicht einmal zu verwenden.
docker-compose.yml
version: '3'
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
ports:
- "5433:5432"
environment:
POSTGRES_PASSWORD: password
web:
build: .
# command: bash -c "rm -f tmp/pids/server.pid && bundle exec rdebug-ide --host 0.0.0.0 --port 1234 -- bin/rails s -p 3000 -b 0.0.0.0"
command: bash -c "rm -f tmp/pids/server.pid && bin/rails s -p 3000 -b 0.0.0.0"
volumes:
- .:/redmine
ports:
- "3003:3000"
# - "1234:1234"
# - "26162:26162"
stdin_open: true
tty: true
depends_on:
- db
Fügen Sie Gemfile Folgendes hinzu: Lesen Sie die Artikel wie z.
Gemfile
group :development do
gem "yard" #Fügen Sie darunter hinzu
gem "better_errors"
gem "binding_of_caller"
gem "pry-rails"
gem "pry-byebug"
#Auskommentieren, weil es nicht stabil funktioniert hat
# gem "ruby-debug-ide"
# gem "debase"
end
Fügen Sie außerdem development.rb
hinzu, um better_erros in der Umgebung von Docker zu verwenden.
config/enviroments/development.rb
BetterErrors::Middleware.allow_ip! "0.0.0.0/0"
Erstellen Sie config / database.yml
und machen Sie es wie folgt.
config/database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: postgres
password: password
development:
<<: *default
database: redmine_development
test:
<<: *default
database: redmine_test
production:
<<: *default
database: redmine
Nachdem die Dateien fertig sind, starten Sie den Container und führen Sie die Anwendung aus.
#Leere Gemfile.Mach ein Schloss
$ touch Gemfile.lock
#Container-Image erstellen
$ docker-compose build
#Container starten
$ docker-compose up -d
#DB-Erstellung
$ docker-compose run --rm web rake db:create
#Führen Sie die Migration durch
$ docker-compose run --rm web bin/bundle exec rake db:migrate
#Redmines Standard-Dateneingabeaufgabe
$ docker-compose run --rm web bin/bundle exec rake redmine:load_default_data
Wenn der Start erfolgreich ist, wird der Status wie unten gezeigt mit "Docker-Compse ps" angezeigt.
$ dcom ps
Name Command State Ports
--------------------------------------------------------------------------------
redmine_db_1 docker-entrypoint.sh postgres Up 0.0.0.0:5433->5432/tcp
redmine_web_1 entrypoint.sh bash -c rm - ... Up 0.0.0.0:3003->3000/tcp
Wenn Sie danach auf "http: // localhost: 3003" zugreifen, wird der Redmine-Bildschirm angezeigt. Außerdem können Sie sich zunächst mit "admin" für ID und Passwort anmelden. Damit ist der Umgebungsaufbau abgeschlossen.
Befestigen Sie es am Container, während der Container mit "Docker-Compose Up" ausgeführt wird.
$ docker attach redmine_web_1
Fügen Sie dem relevanten Teil des Codes, den Sie überprüfen möchten, binding.pry
hinzu. Das folgende Beispiel wird zu "wellcome # index" hinzugefügt, das ausgeführt wird, wenn auf den Stammpfad von Redmine zugegriffen wird.
app/controllers/welcome_controller.rb
def index
binding.pry #Fügen Sie hinzu, wo Sie suchen möchten
@news = News.latest User.current
end
Wenn Sie in diesem Zustand auf "http: // localhost: 3003" zugreifen, wird der folgende Inhalt auf dem Terminal angezeigt und Sie können Schritte ausführen.
From: /redmine/app/controllers/welcome_controller.rb:25 WelcomeController#index:
23: def index
24: binding.pry
=> 25: @news = News.latest User.current
26: end
[1] pry(#<WelcomeController>)> Started GET "/" for 172.18.0.1 at 2020-09-27 07:41:34 +0000
[1] pry(#<WelcomeController>)>
Sie können Schritte ausführen, indem Sie einen Befehl unter [1] pry (# <WelcomeController>)>
eingeben.
das ist alles
Recommended Posts