Instalar un entorno de desarrollo Ruby on Rails en OS X 10.7.3
Después de varios intentos frustrados, usando dos y hasta tres tutoriales diferentes, he conseguido instalar mi entorno de desarrollo RoR en OS X 10.7.3. No es tarea fácil, pero en menos de una hora lo tendréis listo si seguís los mismos pasos que yo.
Aparte, os recomiendo que instaléis también RVM para la gestión de diferentes versiones de Ruby y Rails, que luego os simplificará la vida cuando tengáis que cambiar el entorno de desarrollo para mantener aplicaciones que ya tengáis en el servidor.
Finalmente también os recomiendo Passenger para simplificar la integración con Apache y así emular lo más posible el entorno de producción, en lugar de usar WEBrick el servidor web que lleva Rails por defecto.
Mi configuración:
- Mac OSX 10.7.3
- XCode 4.3
- RVM 1.10.3
- Ruby 1.9.3
- Rails 3.2.1
- MySQL 5.5
- Passenger 3.0.11
Ten en cuenta que muchos de los comandos instalarán las últimas versiones de las herramientas y librerías, así que tus resultados puede variar. Por ejemplo, al ejecutar ‘gem install rails’ en el momento de publicar este post, la versión que se instala es Rails 3.2.1., la última versión disponible a finales de Febrero 2012.
1. Instalar Xcode
Te lo puedes bajar en el App Store de Apple, o en el Developer center. Necesitas un Apple ID.
Con XCode 4.3 las herramientas de la línea de comando son opcionales. Instálalas en Xcode > Preferences > Downloads.
2. Homebrew
Homebrew es una applicación que nos sirve para facilitar la instalación de software libre sobre Mac OS X. Siguiendo las instrucciones:
$> /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)" ==> This script will install: /usr/local/bin/brew /usr/local/Library/Formula/... /usr/local/Library/Homebrew/... Press enter to continue ==> Downloading and Installing Homebrew... ==> Installation successful! Now type: brew help
3. RVM
Para instalar RVM, el sistema de gestión (que no control) de versiones de Ruby, lo primero es instalar Git (este si que es un sistema de control de versiones, para liarlo más)
$> brew install git
Una vez tenemos git instalado, instalamos RVM…
$> bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) 1 ... y lo configuramos: 1 $> source ~/.rvm/scripts/rvm
Pero no todo es tan fácil. Si ejecutamos
$> rvm notes Notes for Mac OS X 10.7.3, No Xcode. For JRuby: Install the JDK. See http://developer.apple.com/java/download/ # Current Java version "1.6.0_26" For IronRuby: Install Mono >= 2.6 For Ruby 1.9.3: Install libksba # If using Homebrew, 'brew install libksba' ...
Es decir, que si queremos soporte para Ruby 1.9.3 tenemos que instalar libksba:
brew install libksba
Y luego instalar RVM con clang como compilador (gracias Stack Overflow)
$> rvm install 1.9.3 --with-gcc=clang
Para hacer que 1.9.3 sea la versión por defecto:
$> rvm --default use 1.9.3 $> ruby -v $> ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]
4. Rails
A medida que vamos instalando herramientas, se hace más fácil la instalación:
$> gem install rails
Esto instala Rails y gems dependientes, incluyendo Bundler (gestión de gemas para deployment). Comprobemos que versión tenemos instalada.
$> rails --version Rails 3.2.1
5. MySQL 5.5
Puedes elegir la base de datos SQL o No-SQL que más te guste. Para esta guía he elegido MySQL 5.5.
$> brew install mysql
Para crear la base de datos y los usuarios:
$> unset TMPDIR $> mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
Lanza el servidor
$> mysql.server start
Haz tu instalación de MySQL más segura (cambia el password de root, borra los usuarios anónimos, bloquea el acceso remoto, borra la base de datos de test y vuelve a cargar las tablas de privilegios):
$> mysql_secure_installation
Crear un usuario de desarrollo de MySQL
$> mysql -u root -p
mysql> use mysql;
mysql> insert into user(host, user, password) values ('localhost', 'dev_user', '');
6. Passenger
Phusion passenger es un módulo de Apache para deployear (¿alguien conoce un verbo mejor?) aplicaciones de Ruby on Rails. Es el método recomendado por los creadores de Rails.
$> gem install passenger $> passenger-install-apache2-module
Para configurar Apache con passenger, sigue las instrucciones en pantalla (te las resumo a continuación). Enciende Apache desde System Preferences > Sharing > Web Sharing (tiene que estar activado)
Edita con sudo el fichero /etc/apache2/httpd.conf e incluye la configuración de Passenger al final del fichero:
Include /etc/apache2/other/passenger.conf
Cierra httpd.conf y crea el fichero de configuración para passenger
touch /etc/apache2/other/passenger.conf
Edita con sudo el fichero /etc/apache2/passenger.conf
LoadModule passenger_module /Users/cesar/.rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11/ext/apache2/mod_passenger.so PassengerRoot /Users/cesar/.rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11 PassengerRuby /Users/cesar/.rvm/wrappers/ruby-1.9.3-p125/ruby
Ten en cuenta que mi directorio home es 'cesar', pero el tuyo seguramente será otro.
Reinicia Apache
sudo apachectl restart
Comprueba en /var/log/apache2/error_log que no hay errores. Por ejemplo:
[Thu Feb 23 18:00:21 2012] [notice] Apache/2.2.21 (Unix) DAV/2 Phusion_Passenger/3.0.11 configured -- resuming normal operations
7. Crea una aplicación Rails de ejemplo
Voy a seguir el ejemplo típico del blog de Rails, que está en la guía Getting Started with Rails.
Crear el directorio para los proyectos rails. Yo lo tengo en mi home:
$> cd ~ $> mkdir railsprojects $> cd railsprojects
Para crear la aplicación:
$> rails new blog
Configura Passenger y Apache para esta aplicación, activando virtual hosts si no está activado en /etc/apache2/httpd.conf . Busca:
# Virtual hosts # Include /private/etc/apache2/extra/httpd-vhosts.conf
Borra el '#' de la segunda línea, para incluir el fichero de hosts virtuales. A continuación, edita (con sudo) /private/etc/apache2/extra/httpd-vhosts.conf y añade:
<VirtualHost *:80>
ServerName blog.lvh.me
DocumentRoot /Users/cesar/railsprojects/blog/public
RailsEnv development
<Directory /Users/cesar/railsprojects/blog/public>
AllowOverride all
Order allow,deny
Allow from all
Options -Indexes +FollowSymLinks MultiViews
</Directory>
</VirtualHost>
Ten en cuenta que mi directorio home es 'cesar', pero el tuyo puede ser otro.
Reinicia Apache una vez más con sudo apachectl restart
En tu navegador visita blog.lvh.me (ya he hablado de LVH en otro post. Es lo mismo que localhost).
Si ves esta pantalla, ya tienes Rails configurado y funcionando. Ahora hay que terminar de cerrar el stack, configurando la base de datos MySQL.
Editar el Gemfile en el directorio blog y añade:
gem 'mysql2'
Instala la nueva gema con
$> Bundle install
Edita ~/railsprojects/blog/config/database.yml y cambia la sección 'development':
development:
adapter: mysql2
encoding: utf8
database: blog_development
pool: 5
username: dev_user
password:
socket: /tmp/mysql.sock
Crea la base de datos:
$> rake db:create
Dale permisos al usuario dev_user:
$> mysql -u root -p mysql> grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD on *.* to 'dev_user'@'localhost'; $> flush privileges;
Genera el scaffolding de Post, que crea una migración con el script en SQL para modificar la base de datos:
$> rails generate scaffold Post name:string title:string content:text
Si se ha creado una tabla posts en la base de datos: Has triunfado. Enhorabuena ya tienes el entorno de Rails listo en tu Mac OS X 10.7.3