[RUBY] Ecrire le mouvement de Rakefile dans le runbook

introduction

Dans le cadre de mes recherches de fin d'études, rédigez un Rakefile pour créer le PDF utilisé en laboratoire sous la forme d'un runbook.

Environnement d'exécution

Qu'est-ce qu'un runbook

Un programme qui clarifie la procédure et progresse pas à pas. Vous pouvez écrire l'automatisation étape par étape comme l'un des DSL de Ruby.

Pourquoi Runbook au lieu de Rake?

Pour un débutant comme moi qui n'est pas encore habitué à utiliser CUI, l'exécution de Rakefile se déroulera sans autorisation et vous ne saurez pas ce que vous faites. Par conséquent, en utilisant le Runbook, la procédure devient claire et vous pouvez comprendre ce que vous faites. De plus, avec Rakefile, il est difficile si vous n'écrivez pas dans le programme depuis le début de s'arrêter même si vous pensez que quelque chose ne va pas pendant l'exécution, mais avec Runbook, vous pouvez choisir de continuer à demander à l'utilisateur une entrée à chaque fois dans une procédure finement divisée. Vous pouvez.

Aperçu du programme

Principes de base du Runbook

Le programme de base est un programme composé d'un titre, d'une section et d'une étape, et le programme est écrit dans l'étape. Il existe un modèle pour démarrer dans la commande du runbook, alors installez-le et vérifiez les bases du runbook.

> runbook generate runbook my_first_runbook

Cela générera my_first_runbook.rb dans le répertoire.

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

Lorsque vous l'exécutez, il vous sera demandé si vous souhaitez continuer comme indiqué dans la figure ci-dessous.

> 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

Portez Rakefile au runbook

La structure du Rakefile utilisé dans le laboratoire est principalement --Lecture des fichiers org --Convertir en latex

Puisqu'il y en a quatre, écrivez un runbook avec ces étapes.

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

Résultat d'exécution

> 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

Maintenant que nous avons un modèle, nous allons y ajouter le contenu.

J'ai pensé qu'il serait plus facile d'arrêter en divisant la section en une section qui crée du latex et une qui se convertit en PDF, alors faites-le et ajoutez le contenu.

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

Vous avez maintenant un programme runbook qui lit le fichier org dans le répertoire avec "Load org file", le convertit en latex et crée un PDF.

--convert.rb est un programme pour utiliser la fonction de convert_thesis utilisée dans "Charger et convertir un fichier tex". Le contenu consiste à convertir le latex créé à partir de l'organisation en un modèle de rapport.

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{département\hspace{5mm}Numéro d'étudiant\hspace{5mm} your name}
  \date{}

  \maketitle
EOS
  head2 = <<'EOS'
  {\small\setlength\baselineskip{15pt}	%Les références sont des interlignes avec des lettres plus petites
  \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

Souligné

Points des membres du laboratoire

Vous permet de sélectionner l'organisation dans "Charger le fichier org".

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

Le nom du fichier org est affiché sous forme de message sur le terminal, et vous pouvez le sélectionner en entrant "y" ou "n". Si tous sont "n", il sera interrompu de force.

Ensuite, à la toute fin, j'ai créé "Déplacer le rapport" et déplacé le rapport créé vers un répertoire appelé rapport.

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

Signalé par le professeur

--Il a été souligné que vous devez enquêter et confirmer s'il existe un moyen de tout faire sans interruption sans entrer.

Il y avait une description dans le manuel dans Github of gem runbook.

> runbook exec --auto my_runbook.rb

Si vous l'exécutez avec ceci, vous pouvez l'exécuter jusqu'à la fin sans entrée.

Comment utiliser

Introduction du runbook

Installer avec gem. Gem install runbook

Méthode d'exécution

Si vous faites runbook exec runbook.rb, runbook.rb sera exécuté. --runbook.rb est votre programme. --Peut être exécuté dans n'importe quel répertoire si vous connaissez le chemin de l'emplacement du programme

Recommended Posts

Ecrire le mouvement de Rakefile dans le runbook
Ordre de traitement dans le programme
Obtenez le résultat de POST en Java
L'identité des paramètres de rails [: id]
L'histoire de l'écriture de Java dans Emacs
[Order method] Définit l'ordre des données dans Rails
L'histoire de la comparaison de chaînes de bas niveau en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'histoire de la fabrication d'un Othello ordinaire à Java
À propos de l'idée des classes anonymes en Java
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
Est-il courant de ne pas écrire la balise de fermeture de la balise <P> dans Javadoc?
Importer des fichiers de la même hiérarchie en Java
Comment écrire un exemple d'implémentation du problème dans E05 (ruby, C11) en temps réel hors ligne
Ecrire un test en mettant en œuvre l'histoire de M. Nabeats dans le monde avec du rubis
Obtenez l'URL de la destination de la redirection HTTP en Java
Spécifiez le codage des ressources statiques dans Spring Boot
Format de la sortie du journal par Tomcat lui-même dans Tomcat 8
Dans Time.strptime,% j (date totale de l'année) est
Écrivez ABNF en Java et transmettez l'adresse e-mail
Préparer l'environnement d'exécution de Tomcat dans IntelliJ Community
Accédez au fichier war dans le répertoire racine de Tomcat
Comment écrire Scala du point de vue de Java
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
[Ruby] Le rôle des indices dans l'apprentissage des éléments dans les tableaux
Obtenez le nom du scénario de test dans la classe de test JUnit
À propos du problème de blocage dans le traitement parallèle dans la version 4.0 de gem'sprockets
Comprendre les caractéristiques de Scala en 5 minutes (Introduction à Scala)
L'histoire d'une exception d'état illégale dans Jetty.
Examinez les limites du "mur de mémoire de 32 Go" dans Elasticsearch
[Java] Récupère le fichier dans le fichier jar quel que soit l'environnement
Les objets de la liste étaient des références, non? Confirmation de
Résumé personnel des types souvent utilisés dans JUnit 4
Modifier la qualité de stockage des images JPEG en Java
Obtenez l'URL de la destination de la redirection HTTP dans Ruby
Récapitulez les éléments supplémentaires de la classe Optional dans Java 9
[Android] Accrochez le robinet du lien d'ancrage dans WebViewClient
Le monde de Clara-Rules (2)
Jugement du calendrier
Le monde de Clara-Rules (4)
Le monde de Clara-Rules (1)
Le monde de Clara-Rules (3)
Le monde de Clara-Rules (5)
L'idée du tri rapide
Même si j'écris le paramètre de STRICT_QUOTE_ESCAPING dans CATALINA_OPTS dans tomcat8.5, il n'est pas reflété.
Sortie en multiples de 3
L'idée de jQuery
A été effectué dans l'année de base de la semaine calendaire Java
Vérifiez la dépendance d'un artefact maven spécifique dans Coursier
Mettez le fichier dans les propriétés de string avec la configuration spring xml
Installer en spécifiant la version de Django dans l'environnement Docker
Environnement Docker Module Nuxt axios pour définir baseURL
Quelle est la représentation de la connaissance du domaine dans le modèle [DDD]?