Iloo

https://iloo.wordpress.com

Archivos por Etiqueta: tutorial

Ruby on Rails: autentificación con clearance

Un detalle que no falta casi en ninguna aplicación es la autentificación de usuarios, y para esto, rails tiene varias opciones (plugins), entre ellas:

Siendo los dos primeros los más usados y recomendados, pero en esta ocasión al ser realmente muy sencillo se usará clearance.
Primero las versiones de rails y ruby usadas son las siguientes:

Rails 3.1.0.rc5

ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

Inicialmente se instalará la gem de clearance:

gem install clearance

La versión instalada en este momento es clearance (0.12.0).

Crear un nuevo proyecto (se usará SQLite3 como base de datos predeterminada):

rails new clearance-example

Posiblemente sea necesario instalar sqlite3-rails (ojo que requiere que se tenga instalado el paquete libsqlite3-dev):

gem install sqlite3-rails

Crear las “bases de datos”, como se esta usando SQLite3 simplemente es necesario crear archivos de texto vacios:

touch db/development.sqlite3
touch db/test.sqlite3
touch db/production.sqlite3

Es necesario modificar el archivo Gemfile (tal vez sea necesario también leer esto) y añadir la siguiente línea de código que indica que se usará clearance:

gem 'clearance'

Añadir al bundle:

bundle install

Ahora queda “instalar” clearance a la aplicación:

rails g clearance:install

Si todo salio se tendrá el siguiente mensaje en consola:

create  db/migrate/20110820010804_create_diesel_clearance_users.rb
      create  config/initializers/clearance.rb
      insert  app/controllers/application_controller.rb
      create  app/models/user.rb
      create  test/factories/clearance.rb

*******************************************************************************

Next steps:

1. Configure the mailer to create full URLs in emails:

     # config/environments/{development,test}.rb
     config.action_mailer.default_url_options = { :host => 'localhost:3000' }

   In production it should be your app's domain name.

2. Display flashes. For example, in your application layout:

    <% flash.each do |key, value| -%>
      <div class="flash <%= key %>"><%= value %></div>
    <% end -%>

3. Migrate:

     rake db:migrate

*******************************************************************************

Siguiendo los pasos 1, 2 y 3, indicados. Para el paso 3 se tiene la siguiente respuesta:

==  CreateDieselClearanceUsers: migrating =====================================
-- create_table(:users)
   -> 0.0040s
-- add_index(:users, :email)
   -> 0.0012s
-- add_index(:users, :remember_token)
   -> 0.0011s
==  CreateDieselClearanceUsers: migrated (0.0067s) ============================

Para generar las vistas de clearance:

rails g clearance:views

El resultado:

 create  app/views/clearance_mailer/change_password.html.erb
    conflict  app/views/layouts/application.html.erb
Overwrite /home/user/clearance-example/app/views/layouts/application.html.erb? (enter "h" for help) [Ynaqdh] Y
       force  app/views/layouts/application.html.erb
      create  app/views/passwords/create.html.erb
      create  app/views/passwords/edit.html.erb
      create  app/views/passwords/new.html.erb
      create  app/views/sessions/new.html.erb
      create  app/views/users/_form.html.erb
      create  app/views/users/new.html.erb

También es necesario modificar las rutas, añadiendo lo siguiente al archivo /config/routes.rb:

match '/sign_out' =>  'clearance/sessions#destroy'

Con eso ya estaría lista la nueva aplicación creada:

Para verificar que todo este funcionando, se va a crear un nuevo modelo llamado job usando el scaffolding de rails:

rails g scaffold Job name:string description:text

Y el resultado:

active_record
      create    db/migrate/20110820012510_create_jobs.rb
      create    app/models/job.rb
      invoke    test_unit
      create      test/unit/job_test.rb
      create      test/fixtures/jobs.yml
       route  resources :jobs
      invoke  scaffold_controller
      create    app/controllers/jobs_controller.rb
      invoke    erb
      create      app/views/jobs
      create      app/views/jobs/index.html.erb
      create      app/views/jobs/edit.html.erb
      create      app/views/jobs/show.html.erb
      create      app/views/jobs/new.html.erb
      create      app/views/jobs/_form.html.erb
      invoke    test_unit
      create      test/functional/jobs_controller_test.rb
      invoke    helper
      create      app/helpers/jobs_helper.rb
      invoke      test_unit
      create        test/unit/helpers/jobs_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/jobs.js.coffee
      invoke    scss
      create      app/assets/stylesheets/jobs.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss

Seguidamente es necesario migrar la base de datos:

rake db:migrate

Para “asegurar” las acciones dentro del controlador jobs, se debe añadir lo siguiente al archivo /app/controller/jobs_controller.rb justo después de la línea class JobsController < ApplicationController:

before_filter :authorize

Para definir la página de inicio (root) la acción index del controlador jobs es necesario volver a modificar el archivo /config/routes.rb (también se debe borrar el archivo /public/index.html):

root :to => 'jobs#index'

El algoritmo que sigue al ingresar a la aplicación sería el siguiente:

Si el usuario ha iniciado sesión entonces: ingresa a /jobs/index

Si no: ingresa a /sign_in

Hasta aquí todo, casi todo estaría funcionando, lo que no funciona es eliminar los registros jobs, para arreglar esto es necesario añadir lo siguiente al layaout principal (en este caso el archivo /app/views/layouts/default.html.erb), tiene que estar contenido entre las etiquetas <head></head>:

<%= javascript_include_tag "application" %>

Finalmente para levantar el servidor:

rails s

El ejemplo completo en git:

Y el demo:

Ruby: una forma interactiva de aprenderlo

Para aprender Ruby y sin necesidad de instalarlo, podemos visitar la siguiente página:

http://tryruby.org/

Cuenta con tutoriales interactivos y sencillos de seguir… suerte.

jsp: instalando componentes necesarios

Ya había trabajado con jsp en entorno windows, pero ahora con la migración a GNU/Linux, más propiamente Ubuntu 10.04, voy a mostrar un pequeño manual de como preparar e instalar lo que se necesita para trabajar con jsp:

  • Servidor tomcat
  • IDE: en este caso Netbeans 6.9
  • Java Development Kit (JDK): en este caso sun-java, aunque se puede trabajar con openjdk.

Empecemos entonces:

1. Instalar el jdk, en consola escribimos:

sudo aptitude install sun-java6-jdk

2. Instalar tomcat, igualmente en consola:

sudo aptitude install tomcat6

3. Instalar el administrador para tomcat6:

sudo aptitude install tomcat6-admin

4. Un paso extra es instalar algunos ejemplos:

sudo aptitude install tomcat6-examples

5. La configuración:

5.1. Tomcat: en consola:

sudo gedit /etc/default/tomcat6

Donde vemos la siguiente línea de código:

JAVA_HOME=/usr/lib/jvm/openjdk-6-jdk

La reemplazamos con

JAVA_HOME=/usr/lib/jvm/java-6-sun

Ya que estamos usando el jdk de sun, si fuera el openkdj entonces dejamos esto como estaba.

5.2. Añadir administrador:

Existen dos maneras de hacerlo, para ser más específico en dos archivos:

La primera, en consola:

sudo gedit /usr/share/tomcat6/conf/tomcat-users.xml

La segundo, igualmente en consola:

sudo gedit /etc/tomcat6/tomcat-users.xml

La verdad de las dos maneras funciona igual, la diferencia esta en los permisos del segundo archivo, ya que solo puede ser leído por el usuario root (claro que esto se puede cambiar).

Ya sea abriendo el primer o segundo archivo el contenido es el mismo, entonces solo queda agregar el administrador, esto se hace añadiendo una línea de código entre los tags <tomcat-users> y </tomcat-users>, este sería un ejemplo de como tendría que ser la línea de código:

<user username=”nombre_administrador” password=”mi_password”  roles=”admin,manager” />

6. Levantar el servicio, en consola:

sudo /etc/init.d/tomcat6 start

o si ya estuviera levantado:

sudo /etc/init.d/tomcat6 restart

Si todo estuvo bien podemos ver lo siguiente yendo a la dirección local, es necesario aclarar que tomcat6 ocupa el puerto 8080, entonces en el browser:

http://localhost:8080

Y para el administrador:

http://localhost:8080/host-manager/html

Y los ejemplos:

http://localhost:8080/examples/

7. Para descargar el ide netbeans 6.9 nos dirigimos a:

http://netbeans.org/downloads/index.html

8. Una vez descargado el archivo, es necesario darle permisos de ejecución, en consola:

sudo chmod +x netbeans-6.9-ml-linux.sh

9. Instalar Netbeans, nuevamente en consola:

./netbeans-6.9-ml-linux.sh

Los pasos para la instalación de Netbeans son sencillos y no creo que sea necesario mostrarlos, cosas como la ruta de instalación, componentes, etc, etc.

Si todo salio correctamente ya podremos empezar con jsp, crear un archivo vacío y ejecutarlo.

10. En Netbeans nos vamos al menú File->New Project->Java Web->Web Application

Luego en clic en el botón Next, seguidamente será necesario insertar el nombre del proyecto:

Nuevamente clic en el botón Next, en la ventana siguiente mantenemos todos los datos como están, servidor tomcat y la versión de java

Luego clic en el botón Finish y ejecutamos la nueva aplicación con la tecla F6, si no nos abre la aplicación entonces nos vamos en el browser a la ruta de la aplicación (el nombre que se le dio al proyecto que en este caso fue WebApplication1):

http://localhost:8080/WebApplication1/