Rake 101

Este artículo explica los conceptos básicos de Rake. Es una herramienta de construcción súper popular que está escrita en Ruby. Ofrece mucha flexibilidad y se utiliza para gestionar todo tipo de tareas. Si está utilizando Rails, recomiendo echar un vistazo debajo del capó para averiguar qué tareas están a su disposición y cómo escribir su propio.

Los temas

  • Que es rastrillo?
  • Lista de tareas
  • Empezando
  • Espacios de nombres
  • Prerrequisitos
  • Pasando Argumentos
  • Tareas de interes

Que es rastrillo?

Gracias a Rails, Rake se ha convertido en un estándar de facto como herramienta de compilación de Ruby. Es super popular en la comunidad Ruby. Muy temprano, el equipo detrás de Rails decidió usar Rake como el constructor de Rails, lo que significaba que en el pasado, cuando descargabas Rails, también necesitabas una copia de Rake. De esa manera expuso Rake a mucha gente. Un poco más tarde, fue incluido en Ruby (1.9)..

Rake de facto reemplazó la utilidad Unix Make como una herramienta de compilación en Ruby land. Una herramienta de compilación como Rake es útil para automatizar tareas de varios tipos, un software para administrar tareas básicamente. A menudo se usa para tareas de administración en Rails, que es donde es probable que te hayas encontrado hasta ahora, pero sus casos de uso son muchos. Algunas personas escriben sus libros electrónicos en Markdown y configuran tareas de Rake que convierten los archivos relevantes en archivos HTML intermedios, que a su vez se convierten a formatos de libros electrónicos, por ejemplo. Ahorra un montón de problemas al usar Rake para eso.

Lo que hace a Rake realmente poderoso es que estas tareas pueden relacionarse entre sí y pueden construirse una encima de otra. Además, como está escrito en Ruby, puedes escribir cualquier código de Ruby para tus tareas. ¿Quieres usar las bibliotecas de Ruby en tus tareas de Rake? ¡No hay problema! Dato curioso: es el RubyGem más descargado, con más de 100 millones de descargas. Así que definitivamente hay algo en tu cinturón de herramientas al que deberías prestar un poco más de atención.. 

Fue concebido por el difunto Jim Weirich, un conocido y querido desarrollador, orador y colaborador del ecosistema Ruby. Es realmente una hermosa herramienta, ¡gracias, Jim! DEP!

Lista de tareas

Echemos un vistazo a algunas tareas que Rails ofrece de inmediato. Apuesto a que está un poco sorprendido de lo que está disponible si no lo ha comprobado antes. En el directorio relevante de su aplicación o su archivo de Rake, puede listarlos escribiendo lo siguiente en un shell:

Rake - Tareas #or rake -T

Salida:

rake about # Listar versiones de todos los marcos de Rails y el entorno rake activo: limpiar [mantener] # Eliminar activos compilados rake activos: clobber # Eliminar activos compilados rake activos: ambiente # Cargar activos compilar entorno rake activos: precompilar # Compilar todos los activos nombrado en config.assets.precompile rake cache_digests: dependencies # Buscar dependencias de primer nivel para TEMPLATE (como messages / show o comm ... rake cache_digests: nested_dependencies # Buscar dependencias anidadas para TEMPLATE (like messages / show o comments / ... rake db: create # Crea la base de datos de DATABASE_URL o config / database.yml para el cu ... rake db: drop # Deja caer la base de datos de DATABASE_URL o config / database.yml para el curr ... rake db: fixtures: load # Carga los fixtures en la base de datos del entorno actual rake db: migrate # Migra la base de datos (opciones: VERSION = x, VERBOSE = false, SCOPE = blog) rake db: migrate: status # Mostrar el estado de las migraciones rake db: rollback # hace retroceder el esquema a la versión anterior on (especificar pasos w / STEP = n) rake db: schema: cache: clear # Borrar un archivo db / schema_cache.dump rake db: schema: cache: dump # Crear un archivo db / schema_cache.dump rake db: schema: dump # Cree un archivo db / schema.rb que sea portátil contra cualquier DB compatible con AR rake db: schema: load # Cargue un archivo schema.rb en la base de datos dake: seed # Cargue los datos semilla de db / seeds.rb rake db: setup # Cree la base de datos, cargue el esquema e inicialice con los datos de semilla ... rake db: structure: dump # Vuelque la estructura de la base de datos a db / structure.sql rake db: structure: load # Vuelva a crear las bases de datos a partir de la estructura. archivo sql rake db: versión # Recupera el esquema actual número de versión rake doc: app # Genera documentos para la aplicación - también doc disponible: rails, doc: guides (optio… rake log: clear # Trunca todos los archivos * .log en el registro / a cero bytes (especifique los registros con… rake middleware # Imprime las notas de rake de la pila de middleware de Rack # Enumere todas las anotaciones (use las notas: optimice,: fixme,: todo para enfocar) no rastrille es: personalizado # Enumere una anotación personalizada, especifique con ANNOTATION = CUSTOM rake rails: template # Aplica la plantilla provista por LOCATION = (/ path / to / template) o URL rake rails: update # Update configs y algunos otros archivos generados inicialmente ( o use simplemente actualizar ... rutas de rake # Imprima todas las rutas definidas en orden de coincidencia, con nombres rake secret # Genere una clave secreta segura criptográficamente (esto se usa típicamente para ... rake spec # Ejecutar todas las especificaciones en el directorio de especificaciones (excluyendo las especificaciones del complemento) rake espec: controladores # Ejecute los ejemplos de código en espec. / controladores especificación de rastrillo: características # Ejecute los ejemplos de código en espec. características / características rastrillo: ayudantes # Ejecute los ejemplos de código en especificación de rastrillo espec. / ayudantes: modelos # Ejecute los ejemplos de código en espec. modelos rake spec: views # Ejecute los ejemplos de código en spec / views rake stats # Informe de estadísticas de código (KLOC, etc.) desde la aplicación o el tiempo de rake del motor: zones: all # Muestra todas las zonas horarias, también disponibles: time: zones: us , hora: zonas: local ... rake tmp: borrar # Borrar sesión, caché, y archivos de socket de tmp / (w / tmp estrecho: sesiones ... rake tmp: create # Crea directorios tmp para sesiones, caché, sockets y pids

La salida en una aplicación de Rails es sorprendentemente abundante, ¿no es así? Puedes encontrar muchas más tareas prácticas que las habituales. rastrillo db: migrar o rutas de rastrillo que estamos tan familiarizados con y ejecutamos varias veces sobre una base diaria. 

A la izquierda, ve las diversas tareas, y a la derecha, lo que se proporciona opcionalmente como una descripción de cada tarea de comisión. Si desea ver la lista completa, que entre otras cosas también incluye tareas que carecen de una descripción, debe agregar una marca adicional.

Cáscara:

rastrillo -T -A #o rastrillo -T -todos

Salida:

rake about # Listar versiones de todos los marcos de Rails y el entorno rake activo: limpiar [mantener] # Eliminar activos compilados rake activos: clobber # Eliminar activos compilados rake activos: ambiente # Cargar activos compilar entorno rake activos: precompilar # Compilar todos los activos nombrado en config.assets.precompile rake cache_digests: dependencies # Buscar dependencias de primer nivel para TEMPLATE (como messages / show o comments / _comment.html) rake cache_digests: nested_dependencies # Buscar las dependencias anidadas para TEMPLATE (like messages / show or comments / _comment .html) rake db: _dump # rake db: abort_if_pending_migrations # rake db: charset # rake db: collation # rake db: create # Crea la base de datos de DATABASE_URL o config / database.yml para el RAILS_ENV actual (use db: create: all para crear todas las bases de datos en la configuración) rake db: create: all # rake db: drop # Quita la base de datos de DATABASE_URL o config / database.yml para el RAILS_ENV actual (use db: drop: all para eliminar todas las bases de datos en la configuración) rastrillo db : drop: all # rake db: fixtures: identifique # rake db: fixtures: cargue # Cargue los fixtures en la base de datos del entorno actual rake db: forward # rake db: load_config # rake db: migrate # Migre la base de datos (opciones: VERSION = x , VERBOSE = falso, SCOPE = blog) rake db: migrate: down # rake db: migrate: redo # rake db: migrate: reset # rake db: migrate: status # Mostrar el estado de las migraciones rake db: migrate: up # rake db : purge # rake db: purge: all # rake db: reset # rake db: rollback # hace retroceder el esquema a la versión anterior (especifique los pasos w / STEP = n) rake db: schema: cache: clear # Borre una db / schema_cache.dump file rake db: schema: cache: dump # Cree un archivo db / schema_cache.dump rake db: schema: dump # Cree un archivo db / schema.rb que sea portátil contra cualquier DB compatible con AR rake db: schema: load # Cargue un archivo schema.rb en la base de datos rake db: schema: load_if_ruby # rake db: seed # Cargue los datos semilla de db / seeds.rb rake db: setup # Cree la base de datos, cargue el esquema e inicialice con datos de semilla (use db: reset para eliminar también la base de datos primero) rake db: structure: dump # Vuelque la estructura de la base de datos en db / structure.sql rake db: structure: load # Recrear las bases de datos desde el archivo 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: deprecated # rake db: test: load # rake db: test: load_schema # rake db: test: load_structure # rake db: test : prepare # rake db: prueba: purgue # rake db: version # Recupera el esquema actual número de versión rake predeterminado # rake doc # rake doc / app # rake doc / app / created.rid # rake doc: app # Genere documentos para el app - también disponible doc: rails, doc: guías (opciones: TEMPLATE = / rdoc-template.rb, TITLE = "Título personalizado") doc rastrillo: clobber # rake doc: clobber_app # rake doc: clobber_rails # rake doc: guías # rake doc: rails # rake doc: reapp # rake doc: rerails # rake environment # rake html # rake html / created.rid # rake log: clear # Trunca todos los archivos * .log en el registro / a cero bytes (especifique qué registros con LOGS = prueba, desarrollo) rake magic # Magic rake task rake middleware # Imprime tu Rack middleware stack rake no_description # rake notes # Enumera todas las anotaciones (usa notas: optimice,: fixme,: todo para enfocar) rake notes: personalizado # Enumera a anotación personalizada, especifique con ANNOTATION = CUSTOM rake notes: fixme # rake notes: optimice # rake notes: todo # rake rails: template # Aplica la plantilla suministrada por LOCATION = (/ path / to / template) o URL rake rieles: templates: copiar # rake rails: actualizar # Actualizar configuraciones y algunos otros archivos generados inicialmente (o usar simplemente actualizar: configs o actualizar: bin) rake rails: actualizar: bin # rake rails: actualizar: configs # rake railties: instalar: migraciones # rutas de rake # Imprima todas las rutas definidas en orden de coincidencia, con nombres rastrillo secreto # Genere una clave secreta segura criptográficamente (esto generalmente se usa para generar un secreto para sesiones de cookies) especificación de rastrillo # Ejecute todas las especificaciones en el directorio de especificaciones (excluyendo las especificaciones del complemento) especificación de rastrillo : controladores # Ejecutar los ejemplos de código en spec / con trollers rake spec: features # Ejecute los ejemplos de código en spec / features rake spec: helpers # Ejecute los ejemplos de código en spec / helpers rake spec: models # Ejecute los ejemplos de código en spec / models rake spec: prepare # rake spec: statsetup # especificación de rake: vistas # Ejecute los ejemplos de código en spec / views rake stats # Informe de estadísticas de código (KLOC, etc.) desde la aplicación o el tiempo de rake del motor: zones: all # Muestra todas las zonas horarias, también disponibles: time: zones: us, time: zones: local - filtro con el parámetro OFFSET, por ejemplo, OFFSET = -6 rake time: zones: local # rake time: zones: us # rake tmp # rake tmp / cache # rake tmp / cache / asset # rake tmp / caché / activo / desarrollo # rake tmp / caché / activo / producción # rake tmp / caché / activo / prueba # rake tmp / pids # rastrillo tmp / sesiones # rake tmp / sockets # rake tmp: caché: claro # rake tmp: claro # Borre los archivos de sesión, caché y socket de tmp / (restringido w / tmp: sessions: clear, tmp: cache: clear, tmp: sockets: clear) rake tmp: create # Crea directorios tmp para sesiones, caché, sockets y pids rastrillo tmp : pids: clear # rake tmp: sesiones: clear # rake tmp: sockets: clear # 

¡Sorpresa, casi tres veces más! Míralos y juega si quieres, pero confirma los aspectos destacados en la memoria para usarlos en el futuro. Si revisa las tareas para ver qué hay disponible, es posible que no pueda reinventar la rueda..

Empezando

Un Rakefile puede tener una de las siguientes cinco apariciones:

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

Sobre todo verás la llanura. Rakefile Versión, pero un marco como Rails necesita una organización más compleja. Usa lo que sea que haga fluir tu sangre. Empiezas creando un Rakefile o archivos con un .rastrillo extensión si desea dividir las tareas de forma lógica en varios archivos. Luego define tus tareas dentro de cualquiera de ellas.

Organización personalizada de rakefile

Los rieles hacen esto increíblemente fácil. Tiene un archivo de Rake en la raíz de tu aplicación. Contiene lo siguiente:

Rakefile

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

Cuando tiene muchas tareas personalizadas, tiene más sentido dividirlas en discretas .rastrillo archivos y colocarlos en lib / tareas. El Rakefile de arriba solo los carga, pero el lib El directorio es un mejor hogar lógico para las tareas. Incluso hay un generador de Rails para automatizar parte del proceso. Si escribe:

Cáscara

los rieles generan some_task => create lib / tasks / some_task.rake

Obtendrá un Rakefile colocado automáticamente en el directorio correcto. Incluso la tarea ya está configurada para usted. ¡Bonito! En otros proyectos, si no utiliza Rails, solo necesita crear un rakelib directorio y coloque sus Rakefiles allí, preferiblemente con .rastrillo extensiones de archivo. Luego crea un archivo llamado Rakefile Y todos estos archivos ya están a su disposición..

Anatomía de la tarea de rastrillo

lib / tasks / some_task.rake

desc 'Listar las versiones de todos los marcos de Rails y el entorno' tarea: acerca de poner pone 'Algo de magia entra aquí ...' fin

Para los novatos completos de Ruby entre ustedes, y para las personas que provienen de lenguajes de corchetes, así es como se vería entre paréntesis.

desc ('Listar versiones de todos los marcos de Rails y el entorno') tarea (: about) do puts ('Aquí entra algo de magia ...')

Parece muy raro, por cierto. Solo pierde los paréntesis adicionales, nadie escribe las tareas de esta manera..

Proporcionamos una tarea nombrada :acerca de con una descripción que no solo nos recuerda en el futuro lo que queríamos lograr con tareas particulares, sino que también aparece cuando ejecutamos rastrillo -T. No te dejes llevar por esta parte; probablemente no vale la pena.

Justo debajo está la tarea de palabras clave que define una nueva tarea llamada acerca de. Esto puede ser invocado en la línea de comandos a través de rastrear sobre que hace su magia entonces. rastrillo: sobre por otro lado hará que Rake aborte, sin saber "cómo construir tarea: acerca de".

Mediante el termina bloque, tenemos un lambda, y su cuerpo especifica lo que hace la tarea. Esta es la configuración básica que necesitará una tarea. Por supuesto, ofrece muchas más opciones, pero la estructura general es la misma.. 

requerir / importar

Algunos Rakefile

Requerir './whatever.rb'

Si necesita incluir otros archivos Ruby o Rakefiles, se puede lograr fácilmente mediante un estándar exigir declaración.

Algunos Rakefile

importar 'lo que sea.rb'

Rake en sí nos proporciona otra forma de hacer esto: la importar método. Esto se puede utilizar en cualquier línea del archivo de Rake. Esto te ayudará cuando tengas problemas porque el archivo requerido se cargó antes de que Rakefile terminara de cargarse y explotó. El archivo importado, por otro lado, siempre se cargará después del archivo de Rake.

invocar y ejecutar

A veces es posible que desee ejecutar alguna tarea definida desde su Tarea clase manualmente Para este propósito, usted tiene dos métodos de Rake :: Tarea clase: ejecutar y invocar.

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

Con el Rake :: Tarea ['some_task'] código, tenemos el algo de tarea Rake tarea a ejecutar. Devuelve una instancia de la Rake :: Tarea clase y luego ejecuta cualquier método que esté disponible.

Espacios de nombres

Una característica muy interesante es la capacidad de espacio de nombres para sus tareas. Probablemente ya hayas usado docenas de veces. Cuando corres rastrillo db: migrar, has hecho uso de la db espacio de nombres, por ejemplo. Se invoca la tarea separándola con dos puntos. : desde el espacio de nombres. Los espacios de nombres son una forma útil de organizar sus tareas dentro de un archivo rastrillo, ya que las mantiene separadas lógicamente. Múltiples espacios de nombres como tiempo de rake: zonas: todas están bien, por cierto.

Otros ejemplos incluyen:

rake db: drop rake db: semilla rake log: borrar especificación de rake: views rastrillo spec: models rake db: rollback rake spec: helpers rake spec: características rake db: schema: cargar rake de activos: precompilar rake db: migrate: estado

Algunos Rakefile

namespace: db do desc Tarea 'Migrar algunas cosas': migrate do ... end end

Esta es la configuración básica. En realidad es mucho más complicado e incluso se puede anidar varias veces. Eche un vistazo rápido al código base de Rails y vea por sí mismo cómo rastrillo db: migrar está implementado. No te sientas mal si está sobre tu cabeza. Solo mire a su alrededor, intente discernir cómo está estructurado y avance por ahora.

Prerrequisitos

Otra estrategia para organizar sus tareas y mantenerlas en SECO es usar los requisitos previos para ejecutar una tarea. Es como una dependencia que debe ejecutarse primero antes de que la tarea real comience su trabajo. De esa manera usted puede construir tareas más complejas, tan complejas como necesite. Pero recomendaría no ser demasiado inteligente y mantenerlo lo más simple posible, y tan fácil de entender como sea posible.

Algunos Rakefile

tarea: stop_megalomaniac do pone 'Fin de conversación inteligente, persecuciones de autos y armas disparadas' end tarea: bond_saves_the_day =>: stop_psychotic_megalomaniac do pone 'Lots of Dom Pérignon, fin de ostras y el negocio de chicas bond'

Si desea confiar en varias tareas, simplemente las inserta en una matriz. El orden en el que los colocas importa, por supuesto..

tarea: get_mr_wolf do pone "¡No tienes ningún problema, Jules, estoy en eso! ¡Entra allí, relájalos y espera al lobo que debería venir directamente!" end task: figure_out_bonnie_situation do pone "Si me informaron correctamente, el reloj no se detiene. ¿No es así, Jimmy?" tarea final: calm_down_jimmy do pone "Jimmy, hazme un favor, ¿quieres? Olí un poco de café allí. ¿Me harías una taza?" tarea final: get_vince_vega_in_line do pone "¿Volveremos? Comprelo con el destructor. ¡No estoy aquí para decirle por favor! ¡Estoy aquí para decirle qué hacer!" tarea final: clean_car do pone "Necesito que dos muchachos tomen esos productos de limpieza y limpien el interior del auto. ¡Estoy hablando rápido, rápido, rápido!" tarea final: clean_crew do pone "Jim, el jabón! O.K. señores, ambos han estado en el condado antes de que esté seguro. ¡Aquí viene!" tarea final: get_rid_of_evidence_at_monster_joes do pone "Entonces, ¿qué pasa con los trajes? ¿Están yendo a un juego de voleibol o algo así?" tarea final: drive_into_the_sunrise do pone "Call me Winston!" end task: solve_bonnie_situation => [: get_mr_wolf,: calm_down_jimmy,: figure_out_bonnie_situation,: get_vince_vega_in_line,: clean_car, :_inspiration_s_per_com_g__opidence_at_moner_joes_en_es_es_perge_en_line_es_es_es_peridad_comida_continuidad_como_comida_continuidad_continuidad_comida_continuidad_continuidad_continuidad_continuidad_campo_venta_campo_es_es_venta_comidajo_campo_venta_comida_continuidad_campo_venta_comida_campo_es_venta_comida_campo_servicio de los ojos de los animales / animales ? " fin

Si ejecuta la tarea de rake que depende de la otra, obtendremos el siguiente resultado:

Cáscara

$ rake solve_bonnie_situation No tienes ningún problema, Jules, ¡estoy en ello! Entra allí, relájalos y espera al lobo que debería venir directamente. Jimmy, hazme un favor, ¿quieres? Olí un poco de café allí. ¿Me harías una taza? Si me informaron correctamente, el reloj no se detiene. ¿Es cierto Jimmy? ¿Llegar de nuevo? Que sea directo buster. No estoy aquí para decir por favor! Estoy aquí para decirte qué hacer! Los necesito, dos muchachos para tomar esos productos de limpieza y limpiar el interior del auto. Estoy hablando rápido, rápido, rápido! Jim, el jabón! DE ACUERDO. señores, ambos han estado en el condado antes de que esté seguro. ¡Aquí viene! Entonces, ¿qué pasa con los trajes? ¿Ustedes van a un juego de voleibol o algo? Llamame winston Ya sabes, me iría a desayunar. Ganas de desayunar conmigo?

El orden en el que define sus tareas de rake no tiene efecto en la salida, solo el orden en el que coloca las tareas de requisito previo en la matriz para las dependencias de tareas. Además, por favor use el hashrocket => sintaxis para esto.

Una larga lista de dependencias podría ser un olor de código. Si tiene que lidiar con algo largo, límpielo encapsulando dentro de un método que luego aprobamos como requisito previo.

def mr_wolf_tasks [: get_mr_wolf,: calm_down_jimmy], tipo de juego, :_c_juegos_par_juegos_es_juegos_es_juegos_es_juegos_es_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_juegos_paratos ¿Te apetece desayunar conmigo? fin

En el contexto de los requisitos previos, una cosa que debe tenerse en cuenta es que solo necesita mencionar un espacio de nombres si está fuera del relevante..

Algunos Rakefile

namespace: marsellus_wallace do task: call_winston_wolf do… end task final: solve_bonnie_situation => 'marsellus_wallace: call_winston_wolf' do ... end namespace: marsellus_servicio_servicio_servicio_servicio_servicio_servicio_servicio_servicio_servicio_servicio_servicio_servicios_servicio_servicios_servicio_servicio_servicio_servicios_servicios_servicios_servicios_servicios:

Sin embargo, es importante tener en cuenta: en caso de que necesite mencionar el espacio de nombres, debe pasar el requisito previo como una cadena => 'marsellus_wallace: call_winston_wolf'.

Por supuesto, los ejemplos anteriores son ridículos y no ejemplos de la vida real, pero la intención era mostrarle cómo funcionan los requisitos previos y cómo los uniría mientras dependen de los demás..

Pasando Argumentos

Tienes dos opciones para pasar argumentos a las tareas de Rake: ya sea utilizando variables de Bash o haciendo uso de la propia sintaxis de Rake.

Variable ENV

En caso de que no hayas jugado con Bash antes, o Bash te suene como un engaño para ti, tomemos cinco y comenzamos desde el principio. Bash en su shell ofrece dos tipos de variables: variables globales (entorno aka) y variables locales. Ambos están escritos en mayúsculas. Las variables de entorno son globales, lo que significa que están disponibles en todos los shells y no desaparecen cuando se cierran las variables de Bash locales, que solo están disponibles en el shell actual. 

Las variables de entorno pueden contener datos que pueden ser utilizados por múltiples aplicaciones y, a menudo, se utilizan como una forma práctica de compartir las configuraciones. En contraste con eso, las variables locales de Bash son solo eso, locales. En nuestro contexto de uso de Rake, tiene la capacidad de acceder tanto a través de Ruby como a las variables de paso de efecto desde la línea de comando.

Para tu información

Un poco aparte, si escribes env o ENV en su shell, obtendrá acceso a un montón de variables de entorno. Redacté la lista, pero para una mejor comprensión de qué son las variables de entorno y qué incluyen, les animo a que la ejecuten por sí mismos..

Cáscara

env

Salida

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

Si desea ver una lista de variables de Bash locales, puede ejecutar conjunto.

Cáscara

(set -o posix; set) | Menos

los conjunto El comando te da mucha más salida, pero lo anterior te muestra los bits relevantes de inmediato.

Método de clase ENV de Ruby

Ruby ofrece una forma de utilizar variables de entorno y Bash locales por igual a través de un elemento de acceso tipo hash. Para nuestras necesidades, cuando pasamos una variable a una tarea de Rake, será una variable de Bash local, que puede encontrar en la lista de variables que se ejecutan. conjunto o una variación de ella. Ruby puede leerlo usando ENV ['VARIABLE'].

Cáscara

rake prepare_book BOOKTITLE = "Confesiones de un unicornio"

Sin embargo, lo que quiero aclarar es que esta variable no se agregará a la lista de ENV que usa su sistema, las cosas que vio llamando env de la cáscara. Para agregarlo a esa lista, necesitarías exportar eso. Esta es otra historia, pero pensé que debería aclarar esto..

Algunos Rakefile

tarea: prepare_book do book_title = ENV ['BOOKTITLE'] || 'Título de trabajo' pone el final "Hacer algo con el # book_title"

En esta definición de tarea, puede ver cómo nos preparamos para aceptar o incorporar la variable pasada a la invocación de la tarea. Ruby ENV [BASHVARIABLE] hace todo el trabajo pesado. Si TITULO DEL LIBRO Sin embargo, si hubiera sido una variable de entorno global, podríamos haberla accedido dentro de esta definición de tarea con esta sintaxis.

Sintaxis de los parámetros de Rake

El segundo enfoque es usar la sintaxis de Rake puro. Simplemente pasa las variables a llaves cuadradas. Ese enfoque es mejor y puedes mantener las cosas más aisladas. ¿Por qué involucrar a Bash si Rake es perfectamente capaz de manejar esto? Además, no tienes ninguna variable Bash flotando alrededor de esa manera. Si quieres pasar varios argumentos a una tarea, también es mucho más elegante..

Cáscara

Rake "create_mi6_agent [James, Bond, 007]"

Algunos Rakefile

tarea: create_mi6_agent, [: first_name,: last_name,: number] do | t, args | pone "Number # args.number es el comandante # args.first_name # args.last_name". fin

Cuando pasa más argumentos de los que ha definido en su tarea, simplemente puede acceder a ellos a través de args. args.extras muestra una matriz de todos los parámetros adicionales pasados. args.to_a te muestra todos los parámetros, también en una matriz, por supuesto.

Tareas de interes

A continuación se muestra una breve lista de tareas de Rake que vienen con Rails:

  • db
  • Doc
  • tmp
  • estadísticas
  • notas
  • acerca de
  • secreto
  • bienes
  • rutas

db

A continuación hay un par de tareas útiles bajo el db espacio de nombres para ejecutar migraciones de Active Record:

rastrillo db: versión Imprime la versión actual del esquema. La salida se ve algo como esto:

Versión actual: 20160129135912

rastrillo db: migrar ejecuta la (s) última (s) migración (es) aquellas que aún no se han ejecutado. También puedes pasarle una migración específica para ejecutar..

Cáscara

rake db: migrate VERSION = 20080906120000

rastrillo db: crear crea tu base de datos Si por defecto a las bases de datos de desarrollo y prueba.

db / development.sqlite3 db / test.sqlite3

rastrillo db: prueba: preparar se asegura de que las migraciones que ya se ejecutan en su base de datos de desarrollo también se ejecuten para su base de datos de prueba. Si el esquema de la base de datos de prueba no estuviera sincronizado con su base de datos de desarrollo, no sería muy útil, por supuesto.

rastrillo db: drop: all elimina las bases de datos de prueba y desarrollo por defecto.

rastrillo db: migrar: arriba, rake db: migrate: down corre el arriba y abajo Métodos para la migración en cuestión..

rastrillo db: rehacer asegura que, después de haber ejecutado una migración, la migración sea reversible. Corre rastrillo db: abajo primero y luego rastrillo db: hasta.

rastrillo db: rollback deshace la última migración.

rastrillo db: drop Desciende por defecto por las bases de datos de desarrollo y prueba..

rake db: reset Primero suelta las bases de datos y las configura nuevamente cargando el esquema y sembrando la base de datos.

Doc

rastrillo doc: aplicación genera documentación bajo doc / app. Crea páginas HTML sobre su código fuente para una fácil navegación. Muy genial!

Captura de pantalla

rastrillo doc: rieles genera una documentación API bajo doc / api-también como páginas HTML. Práctico si estás fuera de línea, supongo.

tmp

los tmp El directorio en el directorio raíz de su aplicación Rails es el lugar para los archivos temporales: los archivos más destacados para sesiones y caché. rake tmp: crear lo configura con todo lo que necesita para tratar con archivos temporales. rake tmp: caché: claro despeja el tmp / caché directorio. rake tmp: sesiones: claro despeja el tmp / sesiones directorio.

estadísticas

estadísticas de rake te da una buena descripción de tu aplicación.

+----------------------+-------+-------+---------+---------+-----+-------+ | Nombre | Lineas | LOC | Clases | Metodos | M / C | LOC / M | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + | Controladores | 89 | 69 | 6 | 18 | 3 | 1 | | Ayudantes | 13 | 13 | 0 | 1 | 0 | 11 | | Modelos | 89 | 54 | 6 | 7 | 1 | 5 | | Mailers | 0 | 0 | 0 | 0 | 0 | 0 | | Javascripts | 25 | 0 | 0 | 0 | 0 | 0 | | Bibliotecas | 0 | 0 | 0 | 0 | 0 | 0 | | Especificaciones del controlador | 99 | 81 | 0 | 0 | 0 | 0 | | Características especiales | 14 | 11 | 0 | 0 | 0 | 0 | | Especificaciones de ayuda | 45 | 12 | 0 | 0 | 0 | 0 | | Especificaciones del modelo | 10 | 8 | 0 | 0 | 0 | 0 | |