[RAILS] Erstellen Sie eine Redmine-Code-Leseumgebung in Docker

Überblick

Erstellen Sie mit Docker eine Umgebung zum Lesen des Quellcodes von redmine. Das Ziel ist wie folgt.

Motivation

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.

Warum möchten Sie Code lesen?

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.

Warum Redmine?

Ich habe mich aus folgenden Gründen für Redmine entschieden.

Umgebung

Wir werden unter Bezugnahme auf Folgendes fortfahren.

Repository vorbereiten

  1. Forken Sie das Repository von redmine.
  2. Klonen Sie das gegabelte Repository
  3. Wechseln Sie in das Verzeichnis "redmine"
  4. Schneiden Sie einen anderen Zweig aus dem Hauptzweig aus (ich habe ihn zu "code_reading" gemacht)

Erstellen von Docker-bezogenen Dateien

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

Hinzufügen von Gem zum Debuggen

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"

database.yml Einstellungen

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

Die Umgebung starten

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.

Debuggen mit pry-byebug

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

Erstellen Sie eine Redmine-Code-Leseumgebung in Docker
Erstellen Sie eine Unity-Entwicklungsumgebung auf Docker
Redmine auf Docker
Erstellen Sie eine Umgebung mit Docker unter AWS
Erstellen Sie eine Ultra96v2-Entwicklungsumgebung auf Docker 1
Redmine (Docker) Umgebungskonstruktionsnotiz
Erstellen einer Docker-Umgebung mit WSL
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
Erstellen Sie mit Docker eine Node.js-Umgebung
Probieren Sie Redmine auf dem Mac Docker aus
Erstellen Sie Clang x VSCode auf Docker (1)
Erstellen Sie eine XAMPP-Umgebung unter Ubuntu
Konstruktionsverfahren für Rails on Docker-Umgebungen
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
Erstellen einer Haskell-Umgebung mit Docker + VS-Code unter Windows 10 Home
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Verwenden Sie Docker in einer Proxy-Umgebung unter Ubuntu 20.04.1
Erstellen Sie eine WAS-Ausführungsumgebung aus Docker
Erstellen Sie eine Java-Entwicklungsumgebung auf dem Mac
Erstellen Sie eine Java 8-Entwicklungsumgebung mit AWS Cloud 9
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
[Docker] Erstellen Sie die Ausführungsumgebung von Jupyter Lab mit Docker
Erstellen Sie eine JMeter-Umgebung auf Ihrem Mac
Erstellen Sie mit Docker eine TensorFlow-Betriebsüberprüfungsumgebung
So erstellen Sie eine Rails 6-Umgebung mit Docker
Einfache Konstruktion der Docker + Django-Entwicklungsumgebung
Erstellen Sie eine Debug-Umgebung auf einem Container. Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials.
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
[Docker] Erstellen, wenn der Quellcode auf dem Container gebunden ist
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
Erstellen Sie eine Doker-basierte Entwicklungsumgebung unter Windows 10 Home 2020 Version 2 VS Code sollte die Docker-Entwicklungsumgebung komfortabel gestalten
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
Erstellen einer Doker-basierten Entwicklungsumgebung unter Windows 10 Home 2020 Version 1 Bis WSL2-basierte Docker-Konstruktion
Freiheit auf Docker
Installieren Sie einfach Laravel 8 auf dem Docker in der PHP8-Umgebung
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
[Java] Erstellen Sie eine Java-Entwicklungsumgebung unter Ubuntu und überprüfen Sie die Ausführung
Erstellen Sie eine Apache / Tomcat-Entwicklungsumgebung unter Cent OS 7
Erstellen Sie Java x Spring x VSCode x Gradle auf Docker (1)
Erstellen Sie eine Laravel-Umgebung auf einer AWS-Instanz
Erstellen Sie eine Entwicklungsumgebung, um Ruby on Jets + React-Apps mit Docker zu erstellen
Erstellen Sie eine Entwicklungsumgebung für Docker, Java und Code
Erstellen Sie mit Docker (Ubuntu) eine Mecab-Umgebung (NEologd Dictionary).
[Rails] So erstellen Sie eine Umgebung mit Docker