[RUBY] Schreiben Sie die Bewegung von Rakefile in das Runbook

Einführung

Schreiben Sie im Rahmen Ihrer Abschlussforschung ein Rakefile im Runbook-Format, um das im Labor verwendete PDF zu erstellen.

Ausführungsumgebung

Was ist ein Runbook?

Ein Programm, das die Vorgehensweise verdeutlicht und Schritt für Schritt fortschreitet. Sie können die Automatisierung Schritt für Schritt als eines von Rubys DSL schreiben.

Warum Runbook statt Rake?

Für einen Anfänger wie mich, der es noch nicht gewohnt ist, CUI zu verwenden, wird die Ausführung von Rakefile ohne Erlaubnis fortgesetzt und Sie werden nicht wissen, was Sie tun. Durch die Verwendung des Runbooks wird die Vorgehensweise klar und Sie können verstehen, was Sie tun. Mit Rakefile ist es auch schwierig, wenn Sie nicht von Anfang an in das Programm schreiben, um anzuhalten, selbst wenn Sie glauben, dass während der Ausführung etwas nicht stimmt. Mit Runbook können Sie jedoch entscheiden, ob Sie den Benutzer weiterhin jedes Mal in einem detaillierten Verfahren um Eingabe bitten möchten. Sie können.

Programmübersicht

Runbook-Grundlagen

Das Basic ist ein Programm, das aus einem Titel, einem Abschnitt und einem Schritt besteht, und das Programm wird im Schritt geschrieben. Es gibt eine Vorlage zum Starten des Befehls runbook. Installieren Sie sie also und überprüfen Sie die Grundlagen des Runbooks.

> runbook generate runbook my_first_runbook

Dadurch wird my_first_runbook.rb im Verzeichnis generiert.

my_first_runbook.rb


require "runbook"

runbook = Runbook.book "My First Runbook" do
  description <<-DESC                                                           
This is a runbook that...                                                       
  DESC

  section "SECTION" do
    step "STEP" do
      # Add statements here                                                     
    end
  end
end

if __FILE__ == $0
  Runbook::Runner.new(runbook).run
else
  runbook
end

Wenn Sie es ausführen, werden Sie gefragt, ob Sie fortfahren möchten, wie in der folgenden Abbildung gezeigt.

> runbook exec my_first_runbook.rb 
Executing My First Runbook...

Description:
This is a runbook that...

Section 1: SECTION

Step 1.1: STEP

Continue? (enter "h" for help) [c,s,j,P,e,h] 
> runbook exec my_first_runbook.rb 
Executing My First Runbook...

Description:
This is a runbook that...

Section 1: SECTION

Step 1.1: STEP

Continue? (enter "h" for help) [c,s,j,P,e,h] c
>> Continue to execute this step
> runbook exec my_first_runbook.rb 
Executing My First Runbook...

Description:
This is a runbook that...

Section 1: SECTION

Step 1.1: STEP

Continue? Continue to execute this step

Port Rakefile zum Runbook

Die Struktur des im Labor verwendeten Rakefile ist hauptsächlich

Da es vier gibt, schreiben Sie ein Runbook mit diesen als Schritte.

make_pdf.rb


Runbook.book "Make PDF" do
  description <<-DESC                                                           
    This is a make PDF from org                                                 
  DESC

  section "Make pdf" do
    step "Load org file" 

    step "Make tex file" 

    step "Load and Convert tex file" 

    step "Make pdf" 
  end
end

Ausführungsergebnis

> runbook exec make_pdf.rb
Executing Make PDF...

Description:
    This is a make PDF from org

Section 1: Make pdf

Step 1.1: Load org file

Continue? Continue to execute this step
Step 1.2: Make tex file

Continue? Continue to execute this step
Step 1.3: Load and Convert tex file

Continue? Continue to execute this step
Step 1.4: Make pdf

Nachdem wir eine Vorlage haben, werden wir den Inhalt hinzufügen.

Ich dachte, es wäre einfacher aufzuhören, wenn Sie den Abschnitt in einen Abschnitt unterteilen, der Latex erstellt, und einen Abschnitt, der in PDF konvertiert wird. Tun Sie dies also und fügen Sie den Inhalt hinzu.

make_pdf.rb


require "./convert"
require "colorize"

Runbook.book "Make PDF" do
  description <<-DESC
    This is a make PDF from org
  DESC

  section "Make latex" do
    $t_file = "report"
    step "Load org file" do
      note "Load org file"
      ruby_command do
        $file = Dir.glob("*.org")[0].match(/(.*).org/)[1]
        puts "your org file is " + $file.red + "."
      end
    end
    step "Make tex file" do
      note "Make tex file"
      ruby_command do
        system "emacs #{$file}.org --batch -f org-latex-export-to-latex --kill"
      end
    end
    step "Load and Convert tex file" do
      ruby_command do
        $lines = File.readlines("#{$file}.tex")
        $lines = convert_thesis($lines)

        File.open("#{$t_file}.tex", "w") do |f|
        $lines.each { |line| f.print line }
      end
    end
  end

  section "Make PDF" do
    step "Make pdf" do
      note "Make pdf"
      ruby_command do
        commands = ["platex #{$t_file}.tex",
                    "bibtex #{$t_file}.tex",
                    "platex #{$t_file}.tex",
                    "dvipdfmx #{$t_file}.dvi"]
        commands.each { |com| system com }
      end
    end
  end
end

Jetzt haben Sie ein Runbook-Programm, das die Organisationsdatei im Verzeichnis mit "Organisationsdatei laden" liest, in Latex konvertiert und eine PDF-Datei erstellt.

--convert.rb ist ein Programm zur Verwendung der Funktion "convert_thesis", die in "Load and Convert tex file" verwendet wird. Der Inhalt besteht darin, aus org erstellten Latex in eine Vorlage für die Berichterstellung umzuwandeln.

convert.rb


def convert_thesis(lines)
  head = <<'EOS'
  \documentclass[a4j,twocolumn]{jsarticle}
  \usepackage[dvipdfmx]{graphicx}
  \usepackage{url}

  \setlength{\textheight}{275mm}
  \headheight 5mm
  \topmargin -30mm
  \textwidth 185mm
  \oddsidemargin -15mm
  \evensidemargin -15mm
  \pagestyle{empty}


  \begin{document} 

  \title{}
  \author{Abteilung\hspace{5mm}Schülernummer\hspace{5mm} your name}
  \date{}

  \maketitle
EOS
  head2 = <<'EOS'
  {\small\setlength\baselineskip{15pt}	%Referenzen sind Zeilenabstände mit kleineren Buchstaben
  \begin{thebibliography}{9}
  \bibitem{} 
  \end{thebibliography}
  }
  \end{document}
EOS
  new_line = [head]
  lines[31..-1].each do |line|
    new_line << line
  end

  new_line.each do |line|
    line.gsub!('\end{document}', head2)
    line.gsub!('\tableofcontents', "")
  end
  return new_line
end

Wies darauf hin

Punkte von Labormitgliedern

Ermöglicht die Auswahl von org in "Org-Datei laden".

make_pdf.rb


require "./convert"
require "colorize"

Runbook.book "Make PDF" do

...

$t_file = "report"
    step "Load org file" do
      note "Load org file"
      ruby_command do
        str = Dir.glob("*.org")
        str.each do |name|
          puts "your org file is " + name.red + " ? (y or n)"
          res = $stdin.gets.chomp

          if res == "y"
            $file = name.match(/(.*).org/)[1]
            break
          elsif res == "n"
            if name == str[str.size - 1]
              puts "This directory not have the objective file".red
              exit
            end
          end
        end
      end
    end

...

end

Der Name der Organisationsdatei wird als Nachricht auf dem Terminal angezeigt. Sie können ihn auswählen, indem Sie "y" oder "n" eingeben. Wenn alle "n" sind, wird es gewaltsam beendet.

Als nächstes habe ich ganz am Ende "Bericht verschieben" erstellt und den erstellten Bericht in ein Verzeichnis namens "Bericht" verschoben.

make_pdf.rb


require "./convert"
require "colorize"

Runbook.book "Make PDF" do

...

section "Make PDF" do
    step "Make pdf" do

...

    step "Move report" do
      note "Move report"
      ruby_command do
        commands = ["mkdir report",
                    "mv -f #{$t_file}.* ./report",
                    "open ./report/#{$t_file}.pdf"]
        commands.each { |com| system com }
      end
    end
  end
end

Vom Professor darauf hingewiesen

Es gab eine Beschreibung im Handbuch in Github of Gem Runbook.

> runbook exec --auto my_runbook.rb

Wenn Sie es damit ausführen, können Sie es ohne Eingabe bis zum Ende ausführen.

Wie benutzt man

Einführung von Runbook

Mit gem installieren. Gem install runbook

Ausführungsmethode

Wenn Sie "runbook exec runbook.rb" ausführen, wird runbook.rb ausgeführt. --runbook.rb ist dein Programm.

Recommended Posts

Schreiben Sie die Bewegung von Rakefile in das Runbook
Reihenfolge der Verarbeitung im Programm
Holen Sie sich das Ergebnis von POST in Java
Die Identität der Schienenparameter [: id]
Die Geschichte des Schreibens von Java in Emacs
[Bestellmethode] Legen Sie die Reihenfolge der Daten in Rails fest
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Behandlung von Java Beans in der Methodenkette
Die Geschichte eines gewöhnlichen Othello in Java
Über die Idee anonymer Klassen in Java
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
Ist es Mainstream, das schließende Tag des <P> -Tags nicht in Javadoc zu schreiben?
Importieren Sie Dateien derselben Hierarchie in Java
Offline-Echtzeit-Schreibweise Implementierungsbeispiel für das Problem in E05 (Ruby, C11)
Schreiben Sie einen Test, indem Sie die Geschichte von Mr. Nabeats in der Welt mit Rubin umsetzen
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
Geben Sie die statische Ressourcencodierung in Spring Boot an
Format der Protokollausgabe von Tomcat selbst in Tomcat 8
In Time.strptime ist% j (Gesamtdatum des Jahres)
Schreiben Sie ABNF in Java und geben Sie die E-Mail-Adresse weiter
Bereiten Sie die Ausführungsumgebung von Tomcat in der IntelliJ Community vor
Greifen Sie auf die War-Datei im Stammverzeichnis von Tomcat zu
Wie schreibe ich Scala aus der Perspektive von Java
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
[Ruby] Die Rolle von Indizes beim Lernen von Elementen in Arrays
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
Über das Problem des Deadlocks bei der Parallelverarbeitung in gem'sprockets '4.0
Verstehen Sie die Eigenschaften von Scala in 5 Minuten (Einführung in Scala)
Die Geschichte einer illegalen staatlichen Ausnahme in Jetty.
Untersuchen Sie die Grenzen der "32 GB Speicherwand" in Elasticsearch
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
Die Objekte in der Liste waren Referenzen, richtig? Bestätigung von
Persönliche Zusammenfassung der in JUnit 4 häufig verwendeten Typen
Ändern Sie die Speicherqualität von JPEG-Bildern in Java
Rufen Sie die URL des HTTP-Umleitungsziels in Ruby ab
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
[Android] Tippen Sie auf den Ankerlink in WebViewClient
Die Welt der Clara-Regeln (2)
Beurteilung des Kalenders
Die Welt der Clara-Regeln (4)
Die Welt der Clara-Regeln (1)
Die Welt der Clara-Regeln (3)
Die Welt der Clara-Regeln (5)
Die Idee der schnellen Sortierung
Selbst wenn ich die Einstellung von STRICT_QUOTE_ESCAPING in CATALINA_OPTS in tomcat8.5 schreibe, wird sie nicht wiedergegeben.
Ausgabe in Vielfachen von 3
Die Idee von jQuery
Wurde im Basisjahr der Java-Kalenderwoche durchgeführt
Überprüfen Sie die Abhängigkeit eines bestimmten Maven-Artefakts in Coursier
Fügen Sie die Datei in die Eigenschaften eines Strings mit Spring XML-Konfiguration ein
Installieren Sie, indem Sie die Version von Django in der Docker-Umgebung angeben
Docker-Umgebung Nuxt-Axios-Modul zum Festlegen von baseURL
Was ist die Darstellung von Domänenwissen im [DDD] -Modell?