Posts tagged how to

All posts

Gotta work with Oracle DB's? Don't sweat!

I’m currently working on a project that in which Rails is connected to an Oracle database. In order to keep it simple, a workmate in the same project passed along this Oracle virtual appliance, that once imported into your VirtualBox, will enable you to use a simple Red Hat Enterprise Linux 5 VM armed with everything you need to use an Oracle DB environment.

You’ll just need to configure the VM network adapters to make it visible from your host OS, and use the IP of the VM in your database.yml settings file.

You’ll have of course to know how to do basic Oracle DB management tasks, such as creating the database and the tablespaces, but anyhow, you’ll be able to use the ODB without problems and keep your system clean :)

CAVEAT EMPTOR: having a VM running consumes a lot of RAM and CPU resources. Take into account your system capabilities when doing this, in the end you might prefer to sacrifice the “cleanliness” of your box to get an usable development system.


Comenzando con Rails

De vez en cuando, alguien aparece con la misma pregunta:

¿Qué necesito para poder programar en Rails? ¿Qué recursos me recomendáis?

Como ya he respondido lo mismo más de una vez, y se que volverán las oscuras golondrinas, he decidido hacer un pequeño post explicando por donde empezar, qué libros mirar, etcétera. Todo opinionado, como Rails: todo basado en mi gusto y experiencia personal.

##El ecosistema Rails, cosas que interesa saber:

  1. El Sistema Operativo
  2. RVM/RBENV
  3. Ruby
  4. Rails
  5. Git
  6. IDE
  7. Base de datos
  8. Testing
  9. El Alto Camino del Frontend
  10. El Oscuro Camino del SysOps
  11. Otros recursos

1 El Sistema Operativo

Esto es fácil: OS X o GNU/Linux. Nunca me he aventurado a desarrollar Rails en Windows, y por lo que he leído, es algo que no quiero hacer salvo que me ofrezcan MUCHA pasta por ello. Tanto para desarrollo como para despliegue.

NOTA: por preguntas que me han hecho, añado un par de links que pueden ser interesantes: Developing Rails in Windows, seriously, y Deploying Rails to Windows Server.

2 RVM y RBENV

Son gestores del entorno para Ruby/Rails y sus gemas (librerías). Cada uno funciona de una forma y sirven para controlar que version de Ruby hay instalada, que librerías y en qué versión están visibles para tal o cual proyecto, etc.

Para despliegues en producción, me gusta Rbenv, no lo conocía hasta hace poco y mola bastante. Para mi máquina local, trabajo con RVM por que fue el primero que conocí y ya es costumbre. Este post (en inglés) viene muy bien para enterarse de como funciona RVM.

Llegar a comprender como funcionan y sacarle partido es comprender como se organiza el ecosistema, como interactúan y son dependientes entre sí Rails, Ruby y las gemas que se usen.

3 Ruby

El lenguaje en sí. Ruby es a Rails lo que Python a Django o PHP a Laravel. Hay dos formas de enfocar esto: aprender Ruby conforme aprendes Rails, o aprender primero Ruby.

Yo hice lo primero por necesidad, y bueno, se tira para adelante, pero cuando sepas más Ruby, volverás a ver código antiguo y te avergonazarás al ver los pifostios que montabas para resolver cosas que con una sola buena línea de Ruby haces ahora más elegante y rápidamente. Es normal.

A mi me gusta mucho el Why’s (Poignant) guide to Ruby, que por cierto recomienda otros libros que son muy buenos también.

4 Rails

El framework. El esqueleto de tu aplicación. El conjunto de herramientas, comandos, estructuras y funcionalidades que te ayudarán a crear sitios web molones en dos patadas (bueno, quizá algo más). Una lista de recursos:

Rails Tutorial

Este lo hemos hecho casi todos, es básicamente el “Hola mundo” del Rails

Las guías Rails

Con esto hemos empezado todos a pegarnos con Rails. Explicaciones, soluciones y consejos básicos y rapidos para empezar a andar, algo así como “The Rails Way in a nutshell”. Imprescindibles!

The Rails Way

La BIBLIA de Rails. Aqui te explican como funciona todo y porqué (cosa bastante importante, no todo va a ser “magia”).

Ojo, que existen varias versiones: el original para Rails 2, el que salió para Rails 3, y el que ha salido hace poco para Rails 4. El problema de este libro es que algunas partes se te pueden quedar algo obsoletas por ejemplo si estás trabajando en Rails 3.2, ya que el libro cubre Rails 3.0, pero en términos generales, está todo ahí.

5 GIT

Es un sistema de control de versiones, que es muy popular y casi está considerado ahora mismo como el estándar de facto. Aquí está la manteca:

Adicionalmente, en Github podrás guardar tus proyectos (o en Bitbucket si necesitas que sean privados) y estar en contacto con la comunidad de desarrolladores, creando gemas, ayudando a mejorarlas, y averiguando como funcionan. Colaborar y aprender, los pilares del FLOSS.

Ojo, esta parte es algo fundamental en el desarrollo y aprendizaje (contínuo) de Rails. Cuando estés más pendiente de lo que pasa Github que de lo que pasa en Facebook, estarás en el buen camino :P (de ser un m4m3r70 pr0, pero hey tiene su aquél, ¡en serio!)

6 IDE

Hay algunos IDES para Rails funcionando que no he probado. Por lo que sé, la forma más habitual de trabajar es consola de comando, un editor de textos potente (TextMate2, SublimeText2, Vim, Gedit o Emacs) y varios navegadores en los que probar.

Todo lo demás que puedas conseguir con GUI para ayudarte si tienes miedo a la consola no te vendrá mal: clientes gráficos de Git, el JewelryBox para la RVM, SequelPro o PgAdmin para tus bases de datos, etc. Usa lo que necesites, con lo que te sientas más cómodo, y lo que tu máquina pueda correr (algunos de los softwares citados solo existen para OS X).

Personalmente, tiro de TextMate2, 4-5 terminales abiertos por proyecto (servidor Rails, IRB, SassWatch, RSpec y una “libre”). Uso la app de Postgres de Heroku para gestionar el servicio de PostgreSQL, PgAdmin o SequelPro para GUI de la BD. Raras veces uso JewelryBox y SourceTree, ya que suelo tirar casi siempre de consola para operaciones de Git y RVM.

7 Base de datos

¿PostgreSQL? ¿MySQL? ¿SQLite? Para el día a día, es complicado que tengas que llegar a pegarte con tu base de datos cara a cara, consulta a consulta, picando SQL ‘a pelo’, salvo que estés trabajando en algo MUY GORDO (¿qué haces leyendo esto, entonces?). Rails ofrece ActiveRecord, una interfaz de consultasa base de datos bastante potente que te facilitará el trabajo (y es legible por humanos!).

Aun así, conocer SQL no te vendrá NUNCA NADA mal (perogrullada). No, en serio, es una de esas cosas básicas que hay que conocer en esto del desarrollo web. Aunque también es cierto que la gran parte de las veces solo te tendrás que pegar con tu SGBD para importar o hacer dumps de la base de datos o crear usuarios :P

8 Testing

Rails viene con TestUnit (creo recordar) para tests unitarios. Yo por mi experiencia recomiendo RSpec, Capybara y Cucumber para cubrir TODOS los ámbitos de testing, desde unitarios hasta aceptacion y features (hablando ya también de BDD y no sólo TDD). En Rails Tutorial lo explican bastante bien de qué va todo, al menos lo básico.

9 El Alto Camino del Frontend

CoffeeScript A grandes rasgos es una versión de la sintaxis de Javascript que hace que se parezca un poco  a Ruby, para tener código más legible y claro. Una forma más bonita de escribir Javascript, vaya. Pero tiene más, yo sigo aún descubriéndolo :D

De Javascript y jQuery pues, qué decir a estas alturas. Llevan funcionando tanto tiempo que resulta manido hablar de ellos :) Si estás leyendo esto ahora, seguro que sabes de qué van, o incluso te manejas con ellos.

10 El Oscuro Camino del SysOps

Capistrano Es un sistema de despliegue automatizado para Rails. Facilita la vida porque si te montas bien los scripts en tu máquina de desarrollo, con cuatro comandos de tu consola LOCAL (él solo se conecta por SSH y hace todo) pones la aplicación a funcionar desde cero, teniendo solo el servidor recién contratado.

Instalar las bases de datos, librerias, ruby, rails, gemas, el código, todo con cuatro comandos. El arte está en hacer bien los scripts, claro, y saber como funciona el SO sobre el que vas a desplegar. Por ejemplo no es igual el tratamiento de servicios de sistema en Debian que en Ubuntu, de ahi que tengas que tener nociones de administración de sistemas.

En mi opinión, es una herramienta FUN-DA-MEN-TAL. También he de decir que yo soy más ducho en el camino oscuro del sistemero, pero bueno. Cierto es que permite a gente sin mucha noción de sistemas configurar un servidor de forma rápida y sencilla para tareas básicas, gracias a que hay quien cuelga sus recetas (scripts) en Github. Solo necesitas saber leer y entender qué hacen, para ver si te interesa usarlas.

10 Otros recursos

Otros Tutoriales En Udemy tienen un tutorial bastante completo. Aqui

Cursos online Son muy interesantes y amenos de hacer los de CodeSchool. Prueba los gratuitos, y si te molan ya vas a los de pago. Como complemento, los de jQuery, Coffeescript y Sass ayudan también.

Yo no los he hecho todos (alguno de pago he pillado cuando les da por ponerlos un día gratis). No te van a enseñar nada que no puedas averiguar con los recursos gratuitos y escritos que hay por la red, pero están muy bien presentados y son muy entretenidos de seguir.

Railscast

Videos cortos en los que Ryan Bates explica de forma corta, amena y con la consola por delante como hacer cosas con Rails y el uso de gemas (librerías) populares. Esto no es para verlo desde el 1 al ultimo, al menos no después de los básicos. Estos son de consumir conforme necesites info: buscar cuál habla sobre lo que te interesas y te miras el que necesites.

¿Me dejo algo? ¿Crees que este post es mejorable? ¿Quieres rebatirme o aconsejarme? ¿Contratarme? ¡Comenta!


Multiple Installations Mayhem: MySQL

While trying to build and install PHP 5.4 in a OS X 10.7.5 in order to test Laravel, I found myself updating several things with Homebrew. It seems that one of the things updated was my brew installation of MySQL.

The thing is that later, I tried to boot the Rails console for a project and it puked this fearsome line:

~/.rvm/gems/<gemset>/gems/activesupport-2.3.17/lib/active_support/dependencies.rb:466:in
    `load_missing_constant':NameError: uninitialized constant MysqlCompat::MysqlRes

As delicate as installing MySQL in Mac OS X and getting it to work is, I knew this was a bad omen. Yes. I couldn’t make any query using the rails console.

So, after checking the Internet, the first probable cause is that after changing the MySQL installation you would need to rebuild the mysql gem. So, after checking ‘which MySQL’ was in use, I reinstalled the gem with some options:

env ARCHFLAGS="-arch x86_64" \
gem install mysql -v=2.8.1 --with-mysql-config=/usr/local/mysql/bin/mysql_config

Everything went smoothly, but I had the same error when firing up the console. Damn. The next thing I found about it was about the libmysqlclient not being installed or found. But locate libmysqlclient gave me three different paths… so it had to be about the library not being visible. After researching, the library is usually looked for in the $DYLD_LIBRARY_PATH. Set the proper path in your .bash_profile (something along /user/local/mysql/lib) and you’ll get going.


Don't let roamers steal your trash

This one is for the IT boys in the dark basements. Love y’all :)

The problem

The results when using df and the sum of du are not the same. Example:

'Hey! I'm getting a 100% disk usage from df but I know I have free space, I've just rm-ed 10GB worth of files.'

The (probable) cause

The df results sync with the actual usage of hd space from time to time. Also, you might have processes that have that file still opened for some reason, even if it’s deleted. Most probably those processes are dead, undead, zombies, infected or whatever you might want to call them. I’ll call them ‘roamers’.

When the computer is rebooted, the roamers are killed along with any other process in the system, and the deleted files are finally purged, but let’s say you can’t afford to reboot the machine, i. e.: you’re working on a server.

What would Grimes do?

Use this command:

lsof +L1

It lists the opened files, and the +L1 filter will leave only those which are being used by just 0 or 1 processes. You might also want to add some grep magic to be sure that you are working only with files that are marked for deletion.

$lsof +L1 | grep "deleted"

COMMAND PID  USER    FD  TYPE DEVICE SIZE/OFF NLINK NODE     NAME
roamer   38  rgrimes txt  REG  14,2    51288     0 58754819 /blah/meh (deleted)``

On the left you get the process name and pid, so the only thing left to do is to go all kill -9 on it’s arse. Be careful though, and kill processes only when you’re sure you won’t break anything else or you don’t have any other exits available.