Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Ruby
Code

Introduccion basica a Rake

by
Length:LongLanguages:
This post is part of a series called All About Rake.
Rake 201

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Este artículo explica los fundamentos de Rake. Es una herramienta de compilación muy popular que está escrita en Ruby. Ofrece mucha flexibilidad y se utiliza para gestionar todo tipo de tareas. Si está utilizando Rails, le recomiendo que eche un vistazo bajo el capó para averiguar qué tareas están a su disposición y cómo escribir las suyas.

Temas

  • ¿Qué es Rake?
  • Lista de tareas
  • Primeros pasos
  • Espacios de nombres
  • Requisitos previos
  • Pasando Argumentos
  • Tareas de interés

¿Qué es Rake?

Gracias a Rails, Rake se ha convertido en un estándar de facto como una herramienta de construcción Ruby. Es muy popular en la comunidad Ruby. 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 a Rake a muchas personas. Un poco más tarde, fue incluido en Ruby (1.9).

Rake de facto reemplazó la utilidad Make de Unix como una herramienta de compilación en Ruby. Una herramienta de compilación como Rake es útil para automatizar tareas de varios tipos—un software para gestionar tareas básicamente. A menudo se utiliza para tareas de administración en Rails—que es donde probablemente se han encontrado con él hasta ahora—pero sus casos de uso son muchos. Algunas personas escriben sus libros electrónicos en Markdown y han establecido tareas Rake que convierten los archivos relevantes en archivos HTML intermedios, que a su vez se convierten en formatos de libros electrónicos, por ejemplo. Se ahorra en un montón de problemas el usar Rake para eso.

Lo que hace que Rake sea realmente poderoso es que estas tareas pueden relacionarse entre sí y pueden ser construidas una encima de otra. Además, ya que está escrito en Ruby, puede escribir cualquier código Ruby para sus tareas. ¿Quieres usar las bibliotecas Ruby en tus tareas de Rake? ¡No hay problema! Hecho divertido: es el más descargado de RubyGem, con más de 100 millones de descargas. Así que definitivamente algo en su cinturón de herramientas al que debe prestar un poco más de atención.

Fue concebido por el fallecido Jim Weirich, un conocido y querido desarrollador, orador y colaborador del ecosistema de Ruby. Es una hermosa herramienta realmente—¡gracias, Jim! ¡Q.E.P.D!

Lista de tareas

Echemos un vistazo a algunas tareas que ofrece Rails. Apuesto a que estás un poco sorprendido de lo que está disponible si no has comprobado antes. En el directorio correspondiente de tu aplicación o de tu Rakefile, puedes listarlos escribiendo lo siguiente en un shell:

Salida:

La salida en una aplicación de Rails es sorprendentemente abundante, ¿no? Puede encontrar muchas más tareas útiles que el db habitual rake db:migrate o rake routes con las que estamos familiarizados y ejecutar varias veces diariamente.

A la izquierda, verá las distintas tareas y, a la derecha, verá lo que se proporciona opcionalmente como una descripción para cada tarea de rake. Si desea ver la lista completa, que entre otras cosas también incluye tareas que carecen de una descripción, debe agregar un indicador adicional.

Terminal:

Salida:

Sorpresa, ¡casi tres veces más! Echale un vistazo a ellos, pero comprometer los aspectos más destacados a la memoria para su uso posterior en el futuro. Comprobar las tareas para ver lo que está disponible podría impedirle reinventar la rueda.

Primeros pasos

Un Rakefile puede tener una de las siguientes cinco variaciones:

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

En su mayoría verá la versión Rakefile, pero un marco como Rails necesita una organización más compleja. Utilice lo que mas le guste. Comience por crear un Rakefile o archivos con una extensión .rake si desea dividir las tareas de forma lógica en varios archivos. A continuación, defina sus tareas dentro de cualquiera de ellos.

Organización de Rakefile personalizada

Rails lo hace increíblemente fácil. Tiene un Rakefile en la raíz de su aplicación. Contiene lo siguiente:

Rakefile

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

Terminal

Obtendras un Rakefile colocado automáticamente en el directorio derecho. Incluso la tarea ya está configurada para ti. ¡Bonito! En otros proyectos, sin utilizar Rails, sólo necesita crear un directorio rakelib y colocar sus Rakefiles allí, preferiblemente con extensiones de archivo .rake. A continuación, crear un archivo llamado Rakefile y todos estos archivos ya están a su disposición.

Anatomía de la tarea de Rake

lib/tasks/some_task.rake

Para los novatos de Ruby completos entre ustedes, y para las personas que vienen de los idiomas de paréntesis, esto es como se vería con paréntesis.

Parece muy raro, por cierto. Simplemente pierda los paréntesis adicionales—nadie escribe tareas de esta manera.

Proporcionamos una tarea nombrada :about con una descripción que no sólo nos recuerda en el futuro lo que queríamos lograr con tareas particulares, sino que también aparece cuando ejecutamos rake -T. No se perezca en esta parte; Probablemente no vale la pena.

A continuación se muestra la tarea de palabras clave que define una nueva tarea about. Esto se puede invocar en la línea de comando vía rake about el cual hace su magia entonces. Rake :about en el otro lado hará que abortar a Rake, no saber "cómo construir la tarea :about".

A través del bloque do end, tenemos un lambda, y su cuerpo especifica lo que hace la tarea. Esta es la configuración básica que una tarea necesitará. Ofrece muchas más opciones, por supuesto, pero la estructura general es la misma.

requerir / importación

Algun Rakefile

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

Algun Rakefile

Rake mismo nos proporciona otra manera de hacer esto: el método import. Esto se puede utilizar en cualquier línea del Rakefile. Éste le ayudará cuando tenga problemas porque el archivo requerido se cargó antes de que el Rakefile terminara de cargar y no continuara. El archivo importado, por otro lado, se cargará siempre después del Rakefile.

Invocar y ejecutar

A veces es posible que desee ejecutar manualmente alguna tarea definida de su clase Task. Para ello, tiene dos métodos de la clase Rake::Task: execute e invoke.

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

Espacios de nombres

Una característica muy interesante es la capacidad de espacio de nombres de sus tareas. Probablemente ya has utilizado esto decena de veces. Cuando se ejecuta rake db:migrate, se ha hecho uso del espacio de nombres db, por ejemplo. Invoca la tarea separándola con dos puntos : desde el espacio de nombres. Los espacios de nombres son una forma práctica de organizar sus tareas dentro de un archivo rake—lo que los mantiene lógicamente separados. Varios espacios de nombres como rake time:zones:all están bien, por cierto.

Otros ejemplos incluyen:

Algun Rakefile

Esta es la configuración básica. En realidad, es mucho más complicado e incluso puede ser anidado varias veces. Echa un vistazo rápido a la base de código de Rails y comprueba por ti mismo cómo se implementa rake db:migrate. No te sientas mal si es mucho para ti. Basta con mirar a su alrededor, tratar de discernir cómo está estructurado, y seguir adelante por ahora.

Requisitos previos

Otra estrategia para organizar sus tareas y mantenerlas DRY es usar los prerrequisitos para ejecutar una tarea. Es como una dependencia que tiene que ejecutarse antes de que la tarea real comience su trabajo. De esta manera usted puede construir tareas más complejas—tan complejas como necesite. Pero yo recomendaría no ser demasiado listo y mantenerlo tan simple como sea posible—y tan fácil de entender como sea posible.

Algun Rakefile

Si desea confiar en múltiples tareas, simplemente colóquelas en una matriz. Por supuesto, el orden en el que usted los coloca es importante.

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

Terminal

El orden en el que se definen las tareas de rastrillo no tiene ningún efecto en la salida—sólo el orden en el que se colocan las tareas de requisito previo en la matriz para las dependencias de tareas. También, utilice la => sintaxis para esto.

Una larga lista de dependencias podría ser un olor de código. Si tienes que lidiar con algo largo, debes limpiarlo encapsulandolo dentro de un método que luego pasamos como un requisito previo.

En el contexto de los requisitos previos, una cosa a tener en cuenta es que sólo necesita mencionar un espacio de nombres si está fuera de la relevante.

Algun Rakefile

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

Por supuesto, los ejemplos anteriores son ejemplos torpes y no de la vida real, pero la intención era mostrar cómo funcionan los prerrequisitos y cómo se unirían mientras dependieran unos de otros.

Pasando Argumentos

Tiene dos opciones para pasar argumentos a tareas Rake: ya sea mediante el uso de variables Bash o mediante el uso de la sintaxis de Rake en sí.

Variable ENV

En caso de que no hayas usado Bash antes—o Bash suena a gobbledegook para ti— tomemos cinco y empezamos desde el principio. Bash en tu shell ofrece dos tipos de variables: global (Alias entorno) 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 cierra una variable—distinta a las variables locales de Bash, que sólo están disponibles en el shell actual.

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

Para tu información

Al igual que un poco de lado, si escribe 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 lo que son las variables de entorno y lo que incluyen, los animo a ejecutarlo por sí mismos.

Terminal

Salida

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

Terminal

El comando set le da mucho más salida, pero lo anterior le muestra los bits relevantes de inmediato.

Método de la Clase ENV de Ruby

Ruby ofrece una forma de utilizar el entorno y las variables locales de Bash por igual mediante un accesorio similar al hash. Para nuestras necesidades, cuando pasamos una variable a una tarea de Rake, va a ser una variable local de Bash, que se puede encontrar en la lista de variables que se ejecutan en set o una variación de la misma. Ruby puede leerlo usando ENV['VARIABLE'].

Terminal

Lo que quiero dejar claro, sin embargo, es que esta variable no se agregará a la lista de ENV que su sistema utiliza, las cosas que vio llamando env desde el shell. Para agregarla a esa lista, necesitará export. Esta es otra historia, pero pensé que debía dejar esto claro.

Algun Rakefile

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. ENV[BASHVARIABLE] de Ruby que hace todo el trabajo pesado. Si BOOKTITLE hubiera sido una variable de entorno global, sin embargo, podríamos haberla accedido dentro de esta definición de tarea, tambien con esta sintaxis.

Sintaxis del parámetro Rake

El segundo enfoque es usar la sintaxis Rake pura. Simplemente pase las variables en 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 de Bash flotando de esa manera. Si quieres pasar varios argumentos en una tarea, es mucho más elegante también.

Terminal

Algun Rakefile

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

Tareas de interés

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

  • db
  • doc
  • tmp
  • stats
  • notes
  • about
  • secret
  • assets
  • routes

db

A continuación se presentan algunas tareas útiles en el espacio de nombres db para ejecutar las migraciones de Active Record:

rake db:version imprime la versión actual del esquema. La salida se parece a esto:

rake db:migrate ejecuta la(s) última(s) migración (es) — aquellos que aún no se han ejecutado. También puede pasar una migración específica a ejecutar.

Terminal

rake db:create crea su base de datos. Si el valor predeterminado es el desarrollo y las bases de datos de prueba.

rake db:test:prepare se asegura de que las migraciones que ya se ejecutan en su base de datos de desarrollo también se ejecutan 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.

rake db:drop:all descarta las bases de datos de prueba y de desarrollo de forma predeterminada..

rake db:migrate:up, rake db:migrate:down ejecuta los métodos up y down de la migración en cuestión.

rake db:redo asegura que, después de ejecutar una migración, la migración sea reversible. Ejecuta rake db:down primero y luego rake db:up.

rake db:rollback anula la última migración.

rake db:drop borra por las bases de datos de desarrollo y prueba de forma predeterminada.

rake db:reset descarta primero las bases de datos y las configura de nuevo cargando el esquema y sembrando la base de datos.

doc

rake doc:app genera documentación en doc/app. Crea páginas HTML sobre su código fuente para facilitar la navegación. ¡Muy genial!

Captura

A screenshot of the mission controller

rake doc:rails genera una documentación API en doc/api—también como páginas HTML. Práctico si estás fuera de línea, supongo.

tmp

El directorio tmp en el directorio raíz de la aplicación Rails es el lugar de los archivos temporales—los archivos más prominentes para las sesiones y la memoria caché. rake tmp:create prepara todo lo que necesitas para tratar archivos temporales. rake tmp:cache:clear borra el directorio tmp/cache. rake tmp:sessions:clear borra el directorio tmp/sessions.

stats

rake stats te ofrece una visión general de tu aplicación.

notes

Puedes dejar notas en tu código. Puede prefijarlos en sus comentarios con TODO, FIXME, OPTIMIZE.

Algun archivo Ruby

Cuando ejecuta rake notes, Rake analiza estos prefijos y obtiene una lista de todas estas notas de su código.

Terminal

Incluso consigue una lista detallada donde usted los encuentra-directorio, nombre de archivo, número de línea [número de línea], todo está incluido. Impresionante, ¿verdad?

about

Rake about le ofrece una visión general de los números de versión para:

  • Rails
  • Ruby
  • RubyGems
  • Adaptador de base de datos
  • Versión del esquema
  • Middleware
  • Raíz de la aplicación

Y mucha mas información útil.

secret

Si usted es paranoico acerca de su clave de sesión y desea reemplazarlo, rake secret generará una nueva clave pseudoaleatoria para usted. No reemplaza la llave para usted, aunque. La salida en el shell se ve así:

assets

rake assets:precompile le permite precompilar sus activos en public/assets. Si desea deshacerse de activos más antiguos, sólo ejecute rake assets:clean. Por último, ejecutar rake assets:clobber elimina todo el directorio public/assets.

routes

rake routes podría ser el más importante. Te muestra todas las rutas de tu aplicación.

Consideraciones finales

Escribir tareas de Rake sin saber lo que está pasando bajo el capó se pone aburrido bastante rápido. Este artículo fue un poco de calentamiento y la introducción para las personas que querían echar un vistazo en Rake por primera vez.

Espero que cubrió todos los conceptos básicos sin ser demasiado seco—después de todo, Rake es super genial y todo, pero al mismo tiempo, quizás no es el más sexy de los juguetes. Este conocimiento básico de Rake, sin embargo, debe darle todo lo que necesita para ponerse peligroso y ampliar su conocimiento de las tareas Rake que están a su disposición.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.