Rake 101

Cet article explique les bases de Rake. C'est un outil de construction très populaire écrit en Ruby. Il offre beaucoup de flexibilité et est utilisé pour gérer toutes sortes de tâches. Si vous utilisez Rails, je vous recommande de jeter un coup d'œil sous le capot pour savoir quelles tâches sont à votre disposition et comment rédiger votre propre.

Les sujets

  • Qu'est-ce qu'un râteau??
  • Liste de tâches
  • Commencer
  • Espaces de noms
  • Conditions préalables
  • Passer des arguments
  • Tâches d'intérêt

Qu'est-ce qu'un râteau??

Grâce à Rails, Rake est devenu un standard de facto en tant qu’outil de construction Ruby. C'est super populaire dans la communauté Ruby. Très tôt, l'équipe derrière Rails a décidé d'utiliser Rake en tant que constructeur de Rails, ce qui signifiait que, lorsque vous téléchargiez Rails, vous deviez également obtenir une copie de Rake. De cette façon, il a exposé Rake à beaucoup de gens. Un peu plus tard, il a été inclus dans Ruby (1.9) lui-même.

Rake a de facto remplacé l'utilitaire Unix Make en tant qu'outil de compilation en Ruby Land. Un outil de construction tel que Rake est pratique pour automatiser des tâches de différents types, un logiciel permettant de gérer des tâches de base. Il est souvent utilisé pour les tâches d’administration dans Rails (c’est là où vous l’avez probablement rencontré jusqu’à présent), mais ses cas d’utilisation sont nombreux. Certaines personnes écrivent leurs ebooks dans Markdown et ont configuré des tâches Rake qui convertissent les fichiers pertinents en fichiers HTML intermédiaires, qui sont ensuite convertis au format ebook, par exemple. Économise beaucoup de difficulté à utiliser Rake pour cela.

Ce qui rend Rake si puissant, c’est que ces tâches peuvent être reliées les unes aux autres et peuvent être construites les unes sur les autres. De plus, comme il est écrit en Ruby, vous pouvez écrire n’importe quel code Ruby pour vos tâches. Vous souhaitez utiliser les bibliothèques Ruby dans vos tâches Rake? Aucun problème! Fait amusant: c'est RubyGem le plus téléchargé, avec plus de 100 millions de téléchargements. Il y a donc certainement quelque chose dans votre ceinture à outils sur lequel vous devriez accorder une plus grande attention.. 

Il a été conçu par le regretté Jim Weirich, développeur bien connu et apprécié, conférencier et contributeur à l'écosystème Ruby. C'est un bel outil, merci Jim! DÉCHIRURE!

Liste de tâches

Jetons un coup d'œil à certaines tâches que Rails propose tout de suite. Je parie que vous êtes un peu surpris de ce qui est disponible si vous n'avez pas vérifié auparavant. Dans le répertoire correspondant de votre application ou de votre fichier Rakefile, vous pouvez les répertorier en tapant ce qui suit dans un shell:

rake --tasks #or rake -T

Sortie:

rake about # Répertorie les versions de tous les frameworks Rails et de l'environnement. rake assets: clean [garder] # Supprime les anciens actifs compilés. rake assets: clobber # Supprime les actifs compilés. rake assets: environnement # Chargement des actifs compilés. # compilez l'environnement nommés dans config.assets.precompile rake cache_digests: dépendances # Recherchez les dépendances de premier niveau pour TEMPLATE (telles que les messages / show ou comm… rake cache_digests: nested_dependencies # Recherchez les dépendances imbriquées dans TEMPLATE (telles que messages / show ou commentaires /… rake db: create # Crée la base de données à partir de DATABASE_URL ou de config / database.yml pour la base de données… rake db: drop # Supprime la base de données à partir de DATABASE_URL ou de config / database.yml pour la base de données actuelle: rake db: fixtures: load # Charge les installations dans la base de données de l'environnement actuel rake db: migrate # Migrer la base de données (options: VERSION = x, VERBOSE = false, SCOPE = blog) rake db: migrate: status # Affichage du statut des migrations rake db: rollback # Ramène le schéma à la version précédente. on (spécifiez les étapes w / STEP = n) rake db: schema: cache: clear # Efface un fichier db / schema_cache.dump rake db: schema: cache: dump # Crée un fichier db / schema_cache.dump rake db: schema: dump # Créez un fichier db / schema.rb portable contre toute base de données prise en charge par AR rake db: schema: load # Chargez un fichier schema.rb dans la base de données rake db: seed # Chargez les données de départ depuis db / seeds.rb rake db: setup # Créez la base de données, chargez le schéma et initialisez-vous avec les données de départ… rake db: structure: dump # Videz la structure de la base de données dans db / structure.sql rake db: structure: load # Recréez les bases de données à partir de la structure. sql file rake db: version # Récupère le numéro de version actuel du schéma rake doc: app # Génère des documents pour l'application - également disponible doc: rails, doc: guides (optio… rake log: clear # Tronque tous les fichiers * .log du journal / jusqu'à zéro octet (spécifiez les journaux avec… middleware rake # Imprime vos notes de rake de pile de middleware Rack # Énumère toutes les annotations (utilisez les notes: optimise,: fixme,: todo pour le focus) rake not es: custom # Énumère une annotation personnalisée, spécifiez-le avec ANNOTATION = CUSTOM rake rails: template # Appliquez le modèle fourni par LOCATION = (/ path / to / template) ou les rake rails d'URL: update # Mettez à jour les configurations et certains autres fichiers générés initialement ( ou utilisez simplement upd… routes de rake # Imprimez toutes les routes définies par ordre de correspondance, avec les noms rake secret # Générez une clé secrète sécurisée par cryptographie (c'est… rake spec # Exécute toutes les spécifications dans le répertoire spec (à l'exception des spécifications de plugin) rake spec: controllers # Exécutez les exemples de code dans spec / controllers rake spec: features # Exécutez les exemples de code dans spec / features rake spec: helpers # Exécutez les exemples de code dans spec / helpers rake spec: models # Exécutez les exemples de code dans spec / modèles rake spec: views # Exécute les exemples de code dans spec / views rake stats # Rapporte les statistiques de code (KLOC, etc.) à partir de l'application ou du moteur heure de rake: zones: tout # Affiche tous les fuseaux horaires, également disponible: time: zones: us , heure: zones: local… rake tmp: clear # Efface la session, cache, et des fichiers de socket à partir de tmp / (étroit w / tmp: sessions… rake tmp: create # Crée des répertoires tmp pour les sessions, le cache, les sockets et les pids

La sortie dans une application Rails est étonnamment abondante, n'est-ce pas? Vous pouvez trouver beaucoup plus de tâches pratiques que d'habitude rake db: migrer ou itinéraires de rake que nous connaissons et courons plusieurs fois par jour. 

À gauche, vous voyez les différentes tâches, et à droite, ce qui est éventuellement fourni comme description pour chaque tâche rake. Si vous souhaitez voir la liste complète, qui inclut entre autres des tâches sans description, vous devez ajouter un indicateur supplémentaire..

Coquille:

rake -T -A #or rake -T -all

Sortie:

rake about # Répertorie les versions de tous les frameworks Rails et de l'environnement. rake assets: clean [garder] # Supprime les anciens actifs compilés. rake assets: clobber # Supprime les actifs compilés. rake assets: environnement # Chargement des actifs compilés. # compilez l'environnement nommés dans config.assets.precompile rake cache_digests: dépendances # Rechercher des dépendances de premier niveau pour TEMPLATE (telles que messages / show ou comments / _comment.html) rake cache_digests: nested_dependencies # rechercher des dépendances imbriquées pour TEMPLATE (telles que messages / show ou commentaires / _comment .html) rake db: _dump # rake db: abort_if_pending_migrations # rake db: charset # rake db: collation # rake db: create # Crée la base de données à partir de DATABASE_URL ou de config / database.yml pour le RAILS_ENV actuel (utilisation: db: create pour créer toutes les bases de données dans la configuration) rake db: create: all # rake db: drop # Supprime la base de données de DATABASE_URL ou de config / database.yml pour le RAILS_ENV actuel (utilisez db: drop: all pour supprimer toutes les bases de données de la configuration). rake db : drop: all # base de données rake: fixtures: identifier # base de données rake: fixtures: charger # chargez les installations dans la base de données de l'environnement en cours rake base de données: forward # base de données: load_config # base de données rake: migrer # Migrer la base de données (options: VERSION = x , VERBOSE = false, SCOPE = blog) rake db: migrate: down # rake db: migrate: redo # rake db: migrate: réinitialiser # rake db: migrate: status # Afficher le statut des migrations rake db: migrate: up # rake db : purge # rake db: purge: all # rake db: reset # rake db: rollback # Remet le schéma à la version précédente (spécifie les étapes w / STEP = n) rake db: schema: cache: clear # Efface une base de données / schema_cache.dump fichier rake db: schema: cache: dump # Créez un fichier db / schema_cache.dump rake db: schema: dump # Créez un fichier db / schema.rb portable par rapport à toute base de données prise en charge par AR rake db: schema: load # Charge un fichier schema.rb dans la base de données rake db: schema: load_if_ruby # rake db: seed # Charge les données de départ à partir de la base de données / seeds.rb rake db: setup # Créez la base de données, chargez-le et initialisez-le avec le données de départ (utilisez db: reset rake db: structure: dump # Sauvegarde la structure de la base de données dans db / structure.sql rake db: structure: load # Recrée les bases de données à partir du fichier structure.sql. rake db: structure: load_if_sql # rake db: test: clone # rake db: test: clone_schema # rake db: test: clone_structure # rake db: test: obsolète # rake db: test: charge # rake db: test: load_schema # rake db: test: load_structure # rake db: test : prepare # rake db: test: purge # rake db: version # Récupère le numéro de version actuel du schéma rake default # rake doc # rake doc / app # rake doc / app / created.rid # rake doc: app # Génère des documents pour le app - également disponible doc: rails, doc: guides (options: TEMPLATE = / rdoc-template.rb, TITLE = "Titre personnalisé") rake doc: clobber # rake doc: clobber_app # rake doc: clobber_rails # rake doc: guides # doc de rake: rails # doc de rake: reapp # doc de rake: rerails # environnement de rake # rake html # rake html / created.rid # journal de rake: effacer # tronque tous les fichiers * .log dans le journal / à zéro octet (spécifiez les journaux avec LOGS = test, développement) rake magic # Middleware rake de tâche de rake magique # Imprime votre pile de middleware Rack rake no_description # rake notes # Énumère toutes les annotations (utilise les notes: optimise,: fixme,: todo for focus). rake notes: custom # Enumerate a annotation personnalisée, spécifiez avec ANNOTATION = CUSTOM notes de rake: fixme # notes de rake: optimisez # notes de rake: todo # rake rails: modèle # Applique le modèle fourni par LOCATION = (/ chemin / vers / modèle) ou les rails de rake URL: modèles: copy # rake rails: update # Met à jour les configurations et autres fichiers générés initialement (ou utilisez simplement update: configs ou update: bin) rake rails: mise à jour: bin # rake rails: mise à jour: configs # rake railties: installer: migrations # rake routes # Imprimez toutes les routes définies par ordre de correspondance, avec les noms rake secret # Générez une clé secrète sécurisée par cryptographie (elle est généralement utilisée pour générer un secret pour les sessions de cookies). Spécification rake # Exécute toutes les spécifications dans le répertoire spec (à l'exception des plug-ins) : controllers # Exécute les exemples de code dans spec / con trollers rake spec: features # Exécute les exemples de code dans spec / features rake spec: helpers # Exécute les exemples de code dans spec / helpers rake spec: models # Exécute les exemples de code dans spec / models rake spec: prepare # rake spec: statsetup # rake spec: views # Exécute les exemples de code dans spec / views rake stats # Rapporte les statistiques de code (KLOC, etc.) à partir de l'application ou du moteur rake time: zones: all # Affiche tous les fuseaux horaires, également disponible: time: zones: us, heure: zones: local - filtre avec le paramètre OFFSET, par exemple OFFSET = -6 heure de rake: zones: local # heure de rake: zones: us # rake tmp # rake tmp / cache # rake tmp / cache / assets # rake tmp / cache / assets / développement # rake tmp / cache / assets / production # rake tmp / cache / assets / test # rake tmp / pids # rake tmp / sessions # rake tmp / sockets # rake tmp: cache: effacer # rake tmp: effacer # Efface les fichiers de session, de cache et de socket de tmp / (étroit w / tmp: sessions: clear, tmp: cache: clear, tmp: sockets: clear) rake tmp: create # Crée les répertoires tmp pour les sessions, cache, sockets et pids rake tmp : pids: clear # rake tmp: sessions: clear # rake tmp: sockets: clear # 

Surprise, presque trois fois plus! Jetez-y un coup d'œil et amusez-vous si vous le souhaitez, mais conservez les points saillants en mémoire pour une utilisation ultérieure. Vérifier les tâches pour voir ce qui est disponible peut vous empêcher de réinventer la roue.

Commencer

Un rakefile peut avoir l'une des cinq apparences suivantes:

  • rakefile.rb
  • rakefile 
  • Rakefile
  • Rakefile.rb
  • .rake files

Surtout vous verrez la plaine Rakefile version, mais un framework comme Rails nécessite une organisation plus complexe. Utilisez tout ce qui fait couler votre sang. Vous commencez par créer un Rakefile ou des fichiers avec un .râteau extension si vous souhaitez fractionner logiquement les tâches sur plusieurs fichiers. Puis définissez vos tâches à l'intérieur de l'une d'elles.

Organisation de rakefile personnalisée

Rails rend cela incroyablement facile. Il a un Rakefile à la racine de votre application. Il contient les éléments suivants:

Rakefile

require File.expand_path ('… / config / application', __FILE__) Rails.application.load_tasks

Lorsque vous avez beaucoup de tâches personnalisées, il est plus logique de les diviser en tâches discrètes. .râteau fichiers et les placer dans lib / tâches. Le Rakefile ci-dessus les charge, mais le lib Le répertoire est une meilleure maison logique pour les tâches. Il existe même un générateur Rails pour automatiser une partie du processus. Si vous tapez:

coquille

les rails génèrent some_task => create lib / tasks / some_task.rake

Vous obtiendrez un Rakefile automatiquement placé dans le bon répertoire. Même la tâche est déjà configurée pour vous. Agréable! Dans d'autres projets, n'utilisant pas Rails, il vous suffit de créer un rakélib répertoire et placez vos Rakefiles dans cet emplacement, de préférence avec .râteau extensions de fichiers. Puis créez un fichier appelé Rakefile et tous ces fichiers sont déjà à votre disposition.

Anatomie de la tâche de ratissage

lib / tasks / some_task.rake

desc 'Répertorie les versions de tous les frameworks Rails et de l'environnement': à propos de la mise en mémoire 'Un peu de magie entre ici…' fin

Pour tous les débutants Ruby parmi vous, et pour les personnes venant de langues comportant beaucoup de parenthèses, voici à quoi cela ressemblerait entre parenthèses.

desc ('Répertorie les versions de tous les frameworks Rails et de l'environnement') tâche (: à propos de) ne met pas ('De la magie entre ici…') fin

Au fait, ça fait très bizarre. Il suffit de perdre les parenthèses supplémentaires: personne n’écrit les tâches de cette façon.

Nous avons fourni une tâche nommée :sur avec une description qui non seulement nous rappelle à l'avenir ce que nous voulions accomplir avec des tâches particulières, mais qui apparaît également lorsque nous courons rake -T. Ne soyez pas paresseux sur cette partie; ça n'en vaut probablement pas la peine.

Juste en dessous se trouve la tâche mot clé qui définit une nouvelle tâche nommée sur. Ceci peut être appelé en ligne de commande via ratisser qui fait sa magie alors. rake: à propos de l'autre côté fera avorter Rake, ne sachant pas "comment construire tâche: à propos".

Via le finissent bloquer, nous avons un lambda, et son corps spécifie ce que fait la tâche. C'est la configuration de base dont une tâche aura besoin. Bien sûr, il offre beaucoup plus d'options, mais la structure générale est la même.. 

exiger / importer

Certains rakefile

nécessite './w Whatever.rb'

Si vous avez besoin d’inclure d’autres fichiers Ruby ou Rakefiles, vous pouvez facilement le faire avec un logiciel standard. exiger déclaration.

Certains rakefile

importer 'quel que soit.rb'

Le rake lui-même nous fournit un autre moyen de le faire: le importation méthode. Ceci peut être utilisé dans n’importe quelle ligne du fichier Rakefile. Celui-ci vous aidera lorsque vous rencontrez des problèmes car le fichier requis a été chargé avant la fin du chargement du fichier Rakefile et a donc explosé. Le fichier importé, par contre, sera toujours chargé après le fichier Rakefile..

invoquer et exécuter

Parfois, vous voudrez peut-être exécuter une tâche définie à partir de votre Tâche classe manuellement. À cette fin, vous avez deux méthodes de la Rake :: Tâche classe: exécuter et invoquer.

Rake :: Task ['some_task']. Invoke Rake :: Task ['some_task']. Execute

Avec le Rake :: Task ['some_task'] code, nous avons le une tâche Rake tâche à exécuter. Il retourne une instance du Rake :: Tâche classe et exécute ensuite n'importe quelle méthode disponible.

Espaces de noms

Une fonctionnalité très intéressante est la possibilité de créer un espace de noms pour vos tâches. Vous avez probablement déjà utilisé cela des dizaines de fois. Quand tu cours rake db: migrer, vous avez utilisé le db espace de noms, par exemple. Vous appelez la tâche en la séparant par deux points : de l'espace de noms. Les espaces de noms sont un moyen pratique d'organiser vos tâches dans un fichier rake. Ils sont séparés logiquement. Plusieurs espaces de noms comme temps de rake: zones: toutes sont bien, au fait.

D'autres exemples incluent:

rake db: drop rake db: graine journal de rake: effacer spec de rake: vues specs de rake: modèles rake db: rollback spécification de rake: helpers spécification de rake: caractéristiques rake db: schéma: charger les actifs de rake: précompiler dake: migrer: statut

Certains rakefile

namespace: db do desc 'Migration de certaines choses' tâche: migrate do… end end

Ceci est la configuration de base. En réalité, c'est beaucoup plus compliqué et peut même être imbriqué plusieurs fois. Jetez un coup d’œil sur la base de code Rails et voyez par vous-même comment rake db: migrer est implémenté. Ne vous sentez pas mal si c'est au-dessus de votre tête. Il suffit de regarder autour de soi, d'essayer de discerner sa structure et de passer à autre chose.

Conditions préalables

Une autre stratégie pour organiser vos tâches et les conserver au sec consiste à utiliser les conditions préalables à l'exécution d'une tâche. C'est comme une dépendance qui doit être exécutée avant que la tâche ne commence son travail. De cette façon, vous pouvez créer des tâches plus complexes, aussi complexes que vous le souhaitez. Mais je recommanderais de ne pas devenir trop intelligent et de le garder aussi simple que possible et aussi facile à comprendre que possible..

Certains rakefile

tâche: stop_megalomaniac met «beaucoup de discours intelligents, poursuites en voiture et des fusils tirés» fin tâche: bond_saves_the_day =>: stop_psychotic_megalomaniac met 'beaucoup de Dom Pérignon, affaires d'huîtres et de filles de lien'

Si vous souhaitez utiliser plusieurs tâches, vous devez simplement les coller dans un tableau. L'ordre dans lequel vous les placez est important.

tâche: get_mr_wolf fait "Tu n'as pas de problème, Jules, je suis dessus! Va-y, détends-toi et attends le loup qui devrait venir directement!" La tâche de fin: figure_out_bonnie_situation met "Si j'ai été informé correctement, le temps est compté. Est-ce bien Jimmy?" fin de la tâche: calm_down_jimmy met "Jimmy, fais-moi une faveur, veux-tu? J'ai senti du café là-bas. Tu me ferais une tasse?" fin de la tâche: get_vince_vega_in_line met "Reviens? Mets-le au clair! Je ne suis pas ici pour dire s'il te plaît! Je suis ici pour te dire quoi faire!" tâche finale: clean_car met "J'ai besoin de deux gars pour prendre ces produits de nettoyage et nettoyer l'intérieur de la voiture. Je parle vite, vite, vite!" fin tâche: clean_crew met "Jim, le savon! O.K. messieurs, vous étiez tous les deux allés dans le comté avant j'en suis sûr. Le moment est venu!" Fin de la tâche: get_rid_of_evidence_at_monster_joes met "Alors, qu'est-ce qui se passe avec les tenues? Vous allez à un match de volley-ball ou quelque chose du genre?" la tâche de fin: drive_into_the_sunrise ne met "Call me Winston!" la fin de la tâche: resol_bonnie_situation = ? " fin

Si vous exécutez la tâche rake qui dépend de l'autre, nous obtiendrons le résultat suivant:

coquille

$ rake resol_bonnie_situation Vous n’avez pas de problème, Jules, je suis dessus! Allez-y, détendez-vous et attendez le loup qui devrait venir directement! Jimmy, fais moi une faveur, veux-tu? J'ai senti du café là-bas. Voulez-vous me faire une tasse? Si j'ai été informé correctement, le temps est compté. Est-ce vrai Jimmy? Viens encore? Obtenez-le droit buster. Je ne suis pas ici pour dire s'il vous plaît! Je suis ici pour vous dire quoi faire! J'ai besoin de vous deux gars pour prendre ces produits de nettoyage et nettoyer l'intérieur de la voiture. Je parle vite, vite, vite! Jim, le savon! D'ACCORD. Messieurs, vous étiez tous les deux dans le comté avant, j'en suis sûr. Ça vient! Alors qu'est-ce qu'il y a avec les tenues? Vous allez à un match de volley-ball? Appelez-moi Winston! Tu sais, j'irais pour le petit déjeuner. Envie de déjeuner avec moi?

L'ordre dans lequel vous définissez vos tâches rake n'a pas d'effet sur la sortie, mais uniquement l'ordre dans lequel vous placez les tâches prérequises dans le tableau pour les dépendances de tâches. Aussi, s'il vous plaît utiliser le hashrocket => syntaxe pour cela.

Une longue liste de dépendances pourrait être une odeur de code. Si vous devez faire face à quelque chose de long, nettoyez-le en l'encapsulant dans une méthode que nous passons ensuite comme condition préalable..

Envoyé par: Envie de prendre le petit déjeuner avec moi? fin

Dans le contexte des conditions préalables, une chose à garder à l'esprit est que vous ne devez mentionner un espace de noms que si vous êtes en dehors de l'espace pertinent..

Certains rakefile

namespace: marsellus_wallace tâche do: call_winston_wolf do… fin de tâche: resol_bonnie_situation => 'marsellus_wallace: call_winston_wolf' do… end espace de noms: marsellus_wallace do tâche: call_winston_wolf do… fin de tâche: throw_bonnie_situation =>:

Il est toutefois important de noter que si vous avez besoin de mentionner l’espace de nom, vous devez transmettre le prérequis sous forme de chaîne. => 'marsellus_wallace: call_winston_wolf'.

Bien sûr, les exemples ci-dessus sont des exemples loufoques et non pas réels, mais le but était de vous montrer comment fonctionnent les conditions préalables et comment les assembler si elles dépendent les unes des autres..

Passer des arguments

Vous avez deux options pour passer des arguments aux tâches Rake: soit en utilisant des variables Bash, soit en utilisant la syntaxe de Rake elle-même..

ENV variable

Si vous n'avez pas joué avec Bash auparavant, ou si Bash vous ressemble, prenez-en cinq et reprenons depuis le début. Bash dans votre shell offre deux sortes de variables: les variables globales (environnement) et les variables locales. Les deux sont écrits en majuscules. Les variables d'environnement sont globales, ce qui signifie qu'elles sont disponibles dans tous les shells et ne disparaissent pas lorsque vous en fermez une, contrairement aux variables locales de Bash, qui ne sont disponibles que dans le shell actuel.. 

Les variables d'environnement peuvent contenir des données pouvant être utilisées par plusieurs applications et sont souvent utilisées comme un moyen pratique de partager des paramètres de configuration. Contrairement à cela, les variables Bash locales ne sont que locales. Dans notre contexte d'utilisation de Rake, vous avez la possibilité d'accéder à la fois à Ruby et, en fait, à passer des variables depuis la ligne de commande..

FYI

Juste un peu de côté, si vous tapez env ou ENV dans votre shell, vous aurez accès à de nombreuses variables d'environnement. J'ai rédigé la liste, mais pour une meilleure compréhension de ce que sont les variables d'environnement et de ce qu'elles incluent, je vous encourage à le gérer vous-même..

coquille

env

Sortie

TERM_PROGRAM = Apple_Terminal TERM = screen-256color SHELL = / bin / bash TMUX = / private / var / dossiers / 4z / 3np9k5ks62b1xpbn_w_lmrgh0000gr / T / tmux-504 / défaut, 4146,0 EDITOR = vim LANG = en_US. % 1 is_vim = echo "# pane_current_command" | grep -iqE "(^ | \ /) g? (voir | n? vim? x?) (diff)? $"… 

Si vous voulez voir une liste de variables Bash locales, vous pouvez exécuter ensemble.

coquille

(set -o posix; set) | Moins

le ensemble commande vous donne beaucoup plus de sortie, mais ce qui précède vous montre tout de suite les bits pertinents.

Méthode de classe ENV de Ruby

Ruby offre un moyen d'utiliser les variables d'environnement et les variables Bash locales de la même manière via un accesseur semblable à un hachage. Pour nos besoins, lorsque nous passons une variable à une tâche Rake, il s’agit d’une variable Bash locale, que vous pouvez trouver dans la liste des variables en cours d’exécution. ensemble ou une variante de celui-ci. Ruby peut le lire en utilisant ENV ['VARIABLE'].

coquille

rake prepare_book BOOKTITLE = "Confessions d'une licorne"

Ce que je veux préciser, cependant, c'est que cette variable ne sera pas ajoutée à la liste ENV que votre système utilise - tout ce que vous avez vu appeler env de la coquille. Pour l'ajouter à cette liste, vous devez exportation il. Ceci est une autre histoire, mais je pensais que je devrais le dire clairement.

Certains rakefile

tâche: prepare_book do book_title = ENV ['BOOKTITLE'] || "Titre de travail" met "faire quelque chose avec le # book_title" fin

Dans cette définition de tâche, vous pouvez voir comment nous nous sommes préparés à accepter ou à incorporer la variable transmise à l'appel de tâche. Ruby ENV [BASHVARIABLE] fait tout le gros du travail. Si TITRE DE LIVRE avait été une variable d'environnement globale, cependant, nous aurions pu y accéder aussi bien avec cette syntaxe qu'avec cette syntaxe.

Syntaxe des paramètres de rake

La seconde approche utilise la syntaxe pure de Rake. Vous passez simplement les variables dans des accolades. Cette approche est meilleure et vous pouvez garder les choses plus isolées. Pourquoi impliquer Bash si Rake est parfaitement capable de gérer cela? De plus, aucune variable Bash ne flotte de cette façon. Si vous souhaitez passer plusieurs arguments dans une tâche, elle est également beaucoup plus élégante..

coquille

rake "create_mi6_agent [James, Bond, 007]"

Certains rakefile

tâche: create_mi6_agent, [: prénom,: nom,, numéro] do | t, args | met "Le numéro # args.number est commander # args.first_name # args.last_name." fin

Lorsque vous transmettez plus d'arguments que ce que vous avez défini dans votre tâche, vous pouvez simplement y accéder via args. args.extras affiche un tableau de tous les paramètres ajoutés en plus. args.to_a vous montre tous les paramètres d'un tableau aussi, bien sûr.

Tâches d'intérêt

Vous trouverez ci-dessous une courte liste des tâches de rake associées à Rails:

  • db
  • doc
  • tmp
  • Statistiques
  • Remarques
  • sur
  • secret
  • les atouts
  • itinéraires

db

Vous trouverez ci-dessous quelques tâches utiles dans le db espace de noms pour l'exécution des migrations Active Record:

rake db: version imprime la version actuelle du schéma. La sortie ressemble à ceci:

Version actuelle: 20160129135912

rake db: migrer exécute la ou les dernières migrations, celles qui ne l'ont pas encore été. Vous pouvez également lui transmettre une migration spécifique à exécuter.

coquille

rake db: migrate VERSION = 20080906120000

rake db: créer crée votre base de données. Si les bases de développement et de test sont définies par défaut.

db / development.sqlite3 db / test.sqlite3

rake db: test: prepare s'assure que les migrations déjà exécutées sur votre base de développement sont également exécutées pour votre base de test. Si le schéma de la base de données de test n'était pas synchronisé avec votre base de développement, cela ne serait bien sûr pas très utile.

rake db: drop: all supprime les bases de test et de développement par défaut.

rake db: migrate: up, rake db: migrate: down exécute le en haut et vers le bas méthodes pour la migration en question.

rake db: redo garantit que, une fois la migration effectuée, la migration est réversible. Ça court rake db: down d'abord et ensuite rake db: up.

rake db: rollback annule la dernière migration.

rake db: drop déposer par le développement et tester les bases de données par défaut.

rake db: reset supprime les bases de données en premier et les reconfigure en chargeant le schéma et en semant la base de données.

doc

rake doc: app génère de la documentation sous doc / app. Il crée des pages HTML sur votre code source pour une navigation facile. Plutôt cool!

Capture d'écran

rake doc: rails génère une documentation API sous doc / api-aussi comme pages HTML. Pratique si vous êtes hors ligne, je suppose.

tmp

le tmp Le répertoire situé dans le répertoire racine de votre application Rails est l'emplacement idéal pour les fichiers temporaires, notamment les fichiers de session et le cache.. rake tmp: créer vous met en place avec tout ce dont vous avez besoin pour traiter les fichiers temporaires. rake tmp: cache: clear efface le tmp / cache annuaire. rake tmp: sessions: clair efface le tmp / sessions annuaire.

Statistiques

statistiques de rake vous donne un bon aperçu de votre application.

+----------------------+-------+-------+---------+---------+-----+-------+ | Nom | Lignes | LOC | Cours | Les méthodes | M / C | LOC / M | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + | Contrôleurs | 89 | 69 | 6 | 18 | 3 | 1 | | Aides | 13 | 13 | 0 | 1 | 0 | 11 | | Modèles | 89 | 54