- Cursos / Ruby on Rails
Ruby on Rails desde Cero: Línea de Comandos Parte 1
- publicado por Alberto Grespan
- el 12 jun
- con 0 comentarios
Detalles del Tutorial
- Dificultad: Aprendiz
- Duración: 20 min
Más artículos en Ruby on Rails desde Cero
Este es el artículo número 20 de 20 de la serie Ruby on Rails desde Cero - Mostrar todos- Instalación & Configuración
- Estructura del proyecto.
- Vistas Dinámicas
- ActiveRecord parte 1
- ActiveRecord Asociaciones
- ActiveRecord parte 2
- ActiveRecord Validaciones
- ActiveModel
- Serializar Objetos (active_model_serializers)
- Enviar emails (ActionMailer)
- Pruebas unitarias (Testing)
- ActionController Parte 1
- ActionController Parte 2
- Rutas
- Sesiones
- Internacionalización
- Logger
- Time Zones
- Procesamiento Asíncrono
- Línea de Comandos Parte 1
Las series de cursos Ruby on Rails en CodeHero buscan otorgarte los conocimientos necesarios, para que puedas desarrollar tus propias aplicaciones Web. En el capítulo anterior aprendimos como se generan los controladores para la aplicación, que representan los métodos en nuestros controladores y cómo se leen parámetros ya sean en el URL o enviados por POST dentro de un formulario.
En este nuevo capítulo aprenderemos un poco más sobre el comando rails y su gran cantidad de sub-comandos y argumentos.
Comando Rails
A lo largo de la serie hemos venido utilizando varios comandos de Rails y Rake, aquí ampliaremos un poco más las posibilidades que existen con estos comandos en una serie de capítulos en los que daremos tips de los comandos más utilizados y sus argumentos.
Rails new
El comando Rails new como ya deben saber lo utilizamos para crear la estructura de nuestra aplicación (una aplicación nueva). Algo que no todos utilizan o consideran necesario es el paso de argumentos que pueden “facilitarnos” varias tareas al iniciar una nueva aplicación tales como:
$ rails new --database=postgresql -T1 $rails new--database=postgresql-T
Este comando si lo vemos por segmentos --database=postgresql
nos crea un proyecto nuevo con el archivo database.yml
específico para una base de datos Postgres, installa la gema pg
(driver) para poderse conectar a dicha base de datos. La bandera -T
o --skip-test-unit
la utilizamos si no vamos a realizar ningún tipo de pruebas (tests) dentro de nuestra aplicación o cuando no queremos utilizar la suite de pruebas que incorpora Rails por defecto por que vamos a utilizar RSpec.
Debo recordar que son muchas las opciones de drivers de conexiones de base de datos: mysql, oracle, postgresql, sqlite3 (por defecto), frontbase, ibm_db, sqlserver, jdbcmysql, jdbcsqlite3, jdbcpostgresql, jdbc.
Rails server
El comando rails server
que hemos utilizado a lo largo del curso también tiene varios argumentos o parámetros que es posible que no conozcan tales como, daemon, config, port, environment, debugger y pid.
Si empleamos algúnos estos paramétros juntos obtenemos algo como:
$ rails server -p 3000 -e production -d1 $rails server-p3000-eproduction-d
Aquí el rails utilizará el servidor que tenga instalado, puede ser WEBrick, Puma u otro, escuchará por el puerto 3000, este es el puerto por defecto. También arrancará -e
en el ambiente de producción así que utilizará la base de datos para ese ambiente y no hay “code reloading” es decir que para que la aplicación tome los cambios de código debemos reiniciar el servidor de Rails. Por último corremos el servidor en modo daemon, para que nos retorne el “prompt” (corre el servidor en background).
Si queremos utilizar el debugger (creo que es algo que la mayoría de las personas usa poco) debemos tener instalada la gema debugger
. Para esto basta con quitar el comentario de la última línea del Gemfile para luego agregar utilizar -u
o --debugger
con el comando rails server
.
Rails console
La consola de Rails nos deja interactuar con nuestra aplicación desde una línea de comandos, es decir, es la consola interactiva IRB con nuestro proyecto precargado. Algo muy interesante al usar la consola es que podemos probar “Queries”, métodos y toda lo relacionado con nuestra aplicación sin tener que ir a la página web. Cuando utilizamos la consola para hacer un “query” interactuamos directamente con la base de datos y podemos modificar su información si no somos cuidadosos.
$ rails console -e production --sandbox1 $rails console-eproduction--sandbox
Cuando llamamos la consola de esta manera estamos diciendo que vamos a utilizar la base de datos de producción y además al utilizar el argumento --sandbox
nos permite modificar e interactuar en con la base de datos sin tener miedo de cambiar valores de manera definitiva, ya que al salirnos de la consola automaticamente se realiza un “rollback” de los cambios que realizamos.
Rails generate y destroy
Los generadores de Rails utiliza “templates” para crear archivos y copiar contenido de las librerías o gemas a la aplicación. Gracias a los generadores no tenemos que crear los archivos manúalmente.
Remitiéndonos al caso anterior si queremos instalar RSpec dentro de nuestro proyecto deberíamos utilizar la librería rspec-rails
, esta librería trae internamente generadores los cuales luego nos permitirán importar ciertos archivos necesarios.
12345 $rails generate rspec:install create .rspec create spec create spec/spec_helper.rb create spec/rails_helper.rb
En este caso particular no existe manera de destruir lo que acabamos de importar desde la librería. pero si nos vamos a un generador particular de Rails tal como el de un controlador o simplemente un scaffold podemos observar lo siguiente:
$ rails generate scaffold User name:string last_name:string email:string --stylesheet-engine=sass --javascript-engine=js -p invoke active_record create db/migrate/20140612020902_create_users.rb create app/models/user.rb invoke rspec create spec/models/user_spec.rb invoke resource_route route resources :users invoke scaffold_controller create app/controllers/users_controller.rb invoke haml create app/views/users create app/views/users/index.html.haml create app/views/users/edit.html.haml create app/views/users/show.html.haml create app/views/users/new.html.haml create app/views/users/_form.html.haml invoke rspec create spec/controllers/users_controller_spec.rb create spec/views/users/edit.html.haml_spec.rb create spec/views/users/index.html.haml_spec.rb create spec/views/users/new.html.haml_spec.rb create spec/views/users/show.html.haml_spec.rb create spec/routing/users_routing_spec.rb invoke rspec create spec/requests/users_spec.rb invoke helper create app/helpers/users_helper.rb invoke rspec create spec/helpers/users_helper_spec.rb invoke jbuilder create app/views/users create app/views/users/index.json.jbuilder create app/views/users/show.json.jbuilder invoke assets invoke js create app/assets/javascripts/users.js invoke sass create app/assets/stylesheets/users.css.sass invoke sass create app/assets/stylesheets/scaffolds.css.sass1234567891011121314151617181920212223242526272829303132333435363738394041 $rails generate scaffold User name:stringlast_name:stringemail:string--stylesheet-engine=sass--javascript-engine=js-p invoke active_record create db/migrate/20140612020902_create_users.rb create app/models/user.rb invoke rspec create spec/models/user_spec.rb invoke resource_route route resources:users invoke scaffold_controller create app/controllers/users_controller.rb invoke haml create app/views/users create app/views/users/index.html.haml create app/views/users/edit.html.haml create app/views/users/show.html.haml create app/views/users/new.html.haml create app/views/users/_form.html.haml invoke rspec create spec/controllers/users_controller_spec.rb create spec/views/users/edit.html.haml_spec.rb create spec/views/users/index.html.haml_spec.rb create spec/views/users/new.html.haml_spec.rb create spec/views/users/show.html.haml_spec.rb create spec/routing/users_routing_spec.rb invoke rspec create spec/requests/users_spec.rb invoke helper create app/helpers/users_helper.rb invoke rspec create spec/helpers/users_helper_spec.rb invoke jbuilder create app/views/users create app/views/users/index.json.jbuilder create app/views/users/show.json.jbuilder invoke assets invoke js create app/assets/javascripts/users.js invoke sass create app/assets/stylesheets/users.css.sass invoke sass create app/assets/stylesheets/scaffolds.css.sass
Con este comando podemos ver que la consola imprimió todo lo que creó con el scaffold, a su vez incluye las modificaciones que le agregamos. En este caso como a mi particularmente no me gusta coffeescript y prefiero JavaScript normal agregué el argumento --javascript-engine=js
el cual cambia el funcionamiento predeterminado de Rails que es generar los archivos para .coffeescript
. También para efectos de la demostración en vez de usar .scss
vamos a usar .sass
en nuestras hojas de estilo con el argumento --stylesheet-engine=sass
. Lo interesante del comando anterior es que nunca se ejecutó realmente ya que la el argumento -p
(--pretend
) que emula el escenario de lo que hará el comando pero no lo ejecuta realmente, esto puede ser muy útil para probar y no dañar nada.
De la misma manera funciona para destruir lo que “acabamos” de generar.
$ rails destroy scaffold User name:string last_name:string email:string --stylesheet-engine=sass --javascript-engine=js -p invoke active_record remove db/migrate/20140612020928_create_users.rb remove app/models/user.rb invoke rspec remove spec/models/user_spec.rb invoke resource_route route resources :users invoke scaffold_controller remove app/controllers/users_controller.rb invoke haml remove app/views/users remove app/views/users/index.html.haml remove app/views/users/edit.html.haml remove app/views/users/show.html.haml remove app/views/users/new.html.haml remove app/views/users/_form.html.haml invoke rspec remove spec/controllers/users_controller_spec.rb remove spec/views/users/edit.html.haml_spec.rb remove spec/views/users/index.html.haml_spec.rb remove spec/views/users/new.html.haml_spec.rb remove spec/views/users/show.html.haml_spec.rb remove spec/routing/users_routing_spec.rb invoke rspec remove spec/requests/users_spec.rb invoke helper remove app/helpers/users_helper.rb invoke rspec remove spec/helpers/users_helper_spec.rb invoke jbuilder remove app/views/users remove app/views/users/index.json.jbuilder remove app/views/users/show.json.jbuilder invoke assets invoke js remove app/assets/javascripts/users.js invoke sass remove app/assets/stylesheets/users.css.sass invoke sass12345678910111213141516171819202122232425262728293031323334353637383940 $rails destroy scaffold User name:stringlast_name:stringemail:string--stylesheet-engine=sass--javascript-engine=js-p invoke active_record remove db/migrate/20140612020928_create_users.rb remove app/models/user.rb invoke rspec remove spec/models/user_spec.rb invoke resource_route route resources:users invoke scaffold_controller remove app/controllers/users_controller.rb invoke haml remove app/views/users remove app/views/users/index.html.haml remove app/views/users/edit.html.haml remove app/views/users/show.html.haml remove app/views/users/new.html.haml remove app/views/users/_form.html.haml invoke rspec remove spec/controllers/users_controller_spec.rb remove spec/views/users/edit.html.haml_spec.rb remove spec/views/users/index.html.haml_spec.rb remove spec/views/users/new.html.haml_spec.rb remove spec/views/users/show.html.haml_spec.rb remove spec/routing/users_routing_spec.rb invoke rspec remove spec/requests/users_spec.rb invoke helper remove app/helpers/users_helper.rb invoke rspec remove spec/helpers/users_helper_spec.rb invoke jbuilder remove app/views/users remove app/views/users/index.json.jbuilder remove app/views/users/show.json.jbuilder invoke assets invoke js remove app/assets/javascripts/users.js invoke sass remove app/assets/stylesheets/users.css.sass invoke sass
Si se fijaron con atención en el output de ambos comandos, una vez que incluímos RSpec a la combinación de nuestro proyecto cada vez que utilicemos un generador tipo “scaffold” se crearán los templates para realizar los “tests” con RSpec inmediatamente y no los templates de los tests originales. Para mi, estos son los detalles formidables de rails y de las librerías como rspec-rails
que incluyen el “autogenerador”. Lo mismo ocurre si utilizan haml-rails
y otras muchas gemas.
Adicional a esto que acabamos de mostrar pueden agregar sus propios “defauls” al archivo config/application.rb
para que no tengan que estar escribiendo los argumentos con el comando todo el tiempo.
123456 configgeneratorsdo|g| gtemplate_engine:haml gjavascript_engine:jsend¬ configsasspreferred_syntax=:sass
Conclusión
Con esto quiero que miren y hagan --help
para ver todos los argumentos de varios comandos, es decir, para el generate del scaffold pueden hacer rails generate scaffold --help
y ver todos sus argumentos, de igual manera ocurre en el resto de los comandos. En el siguiente capítulo que será continiación de este veremos el comando rake
con las múltiples tareas que incluye Rails. Siéntanse libres en consultar cualquier duda a través de los comentarios.
¡Hasta el próximo capítulo!