Mostrando entradas con la etiqueta ruby. Mostrar todas las entradas
Mostrando entradas con la etiqueta ruby. Mostrar todas las entradas

viernes, 11 de mayo de 2012

Comentar bloque de código HTML y RUBY mezclado

Una forma un tanto laboriosa, pero al parecer la más simple que hay en rails, para comentar múltiples líneas con código ruby y html entremezclado, en los ficheros con scripts para generar vistas:

<%
=begin %>
... aquí va el código html y ruby entremezclado, que se ha deshabilitado por estar comentado
<%
=end %>
Una monstruosidad de comentarios multilínea, para un framework que presume de simplificar... En jsp por el contario, sería tan simple como rodear el bloque a comentar con <%-- y --%>.

"10 cosas" sobre Ruby para un programador de Java

10 cosas sobre Ruby para un programador de Java (en inglés)

Como instalar RVM (gestor de versiones de RUBY)

En sistemas basados en linux:

Modo normal

Instalar RVM:
$ curl -L get.rvm.io | bash -s stable
Cargar RVM:
$ source ~/.rvm/scripts/rvm
Listar los requisitos (seguir las instrucciones):
$ rvm requirements
Instalar una versión de ruby:
$ rvm install 1.9.3

Modo guiado

En modo guiado con ruby & rails:
$ curl -L get.rvm.io | bash -s stable --rails
En modo guiado con rubinius & rails & puma:
$ curl -L get.rvm.io | bash -s stable --ruby=rbx --gems=rails,puma

Windows

Para instalar RVM con cygwin en Windows seguir éste tutorial.

domingo, 6 de mayo de 2012

Rails TypeError - can't convert false into String

He estado probando definir páginas estáticas en un proyecto rails. Había creado el proyecto y configurado para que utilizase una base de datos MySql. La base de datos contra la que trabajaba se llamaba "OFF". Al arrancar el servidor y realizar una petición a la página estática que había generado obtenía el inexplicable error: "TypeError can't convert false into String".
Mirando las trazas el error se producía en:
mysql2 (0.3.11) lib/mysql2/client.rb:44:in `connect'
Probé a configurar otra base de datos con otro nombre y funcionaba correctamente. Así que mi sospecha es que lo que pasaba es que "OFF" es palabra reservada, parece que de sql, que no se puede usar como nombre de base de datos (y seguramente tampoco como nombre de columna, tabla, modelo en rails,...). He encontrado ésta recopilación de palabras reservadas relacionadas con rails, que habrá que evitar usar como nombres personalizados en nuestras aplicaciones rails y elementos relacionados, para evitarnos dolores de cabeza.

martes, 3 de abril de 2012

RVM - error "RVM is not a function, selecting rubies with 'rvm use ...' will not work."

Supongamos que hemos instalado RVM, e incluso hemos instalado alguna versión de Ruby usando el propio RVM. Ahora cuando intentamos establecer la versión de Ruby a usar, con:
rvm use una_version_de_Ruby
Nos escupe un error del tipo:
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
Para arreglarlo, tenemos que añadir al fichero ~/.bashrc lo siguiente:
if test -f ~/.rvm/scripts/rvm; then
[ "$(type -t rvm)" = "function" ] || source ~/.rvm/scripts/rvm
fi
De ésta forma, cada vez que inicialicemos una shell en modo interactivo, si rvm todavía no es una función, se evaluará el script ~/.rvm/scripts/rvm para que esté disponible rvm como función y podrá ir haciendo los cambios oportunos a la configuración de entorno de la shell.

Instalar Ruby con RVM

RVM permite instalar y gestionar distintas versiones de Ruby, instaladas simultáneamente en el equipo.

Es recomendable, antes de instalar versiones de Ruby con RVM y prevenir que el proceso no se complete por falta de alguna dependencia, ejecutar:
rvm requirements

Que mostrará los paquetes que tenemos que tener instalados, que se requerirán durante la instalación.

Requirements for Linux ( DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10" )

NOTE: 'ruby' represents Matz's Ruby Interpreter (MRI) (1.8.X, 1.9.X)
This is the *original* / standard Ruby Language Interpreter
'ree' represents Ruby Enterprise Edition
'rbx' represents Rubinius

bash >= 4.1 required
curl is required
git is required (>= 1.7 for ruby-head)
patch is required (for 1.8 rubies and some ruby-head's).

To install rbx and/or Ruby 1.9 head (MRI) (eg. 1.9.2-head),
then you must install and use rvm 1.8.7 first.

Additional Dependencies:
# For Ruby / Ruby HEAD (MRI, Rubinius, & REE), install the following:
ruby: /usr/bin/apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

# For JRuby, install the following:
jruby: /usr/bin/apt-get install curl g++ openjdk-6-jre-headless
jruby-head: /usr/bin/apt-get install ant openjdk-6-jdk

# For IronRuby, install the following:
ironruby: /usr/bin/apt-get install curl mono-2.0-devel

Pero por experiencia personal, no hace falta instalar del tirón todos los paquetes que se mencionan. Yo probé a instalar directamente una versión de Ruby, y cuando el proceso fallaba, instalaba sólo los paquetes de los que se quejaba que faltaban (en mi caso bison y autoreconf). Como vamos a estar instalando la misma versión, sólo al principio se descargan los fuentes, y se consume tiempo, pero si volvemos a ejecutar la instalación de esa misma versión, ya no se vuelve a descargar los fuentes, porque ya los tiene, así que no se tarda mucho y nos instalamos sólo lo imprescindible.

Una vez se tiene instalado RVM, podemos ver las versiones de Ruby y derivados disponibles que podemos instalar con rvm. Para ello ejecutamos:
rvm list known

Cuando ejecute esto, las versiones de Ruby que tenía disponibles eran:
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-p358]
[ruby-]1.8.7-head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2-p180
[ruby-]1.9.2-p290
[ruby-]1.9.2[-p318]
[ruby-]1.9.2-head
[ruby-]1.9.3-preview1
[ruby-]1.9.3-rc1
[ruby-]1.9.3-p0
[ruby-]1.9.3[-p125]
[ruby-]1.9.3-head
ruby-head

Para instalar una versión concreta pondremos:
rvm install identificador_versión

Por ejemplo, para instalar la versión [ruby-]1.9.3-head, podemos poner:
rvm install 1.9.3-head
o
rvm install ruby-1.9.3-head

Hay que tener en cuenta, que si no tenemos alguna versión de Ruby ya instalada o su ejecutable no está en la ruta, obtendremos un error durante el proceso de instalación, si intentamos instalar una versión acabada en "-head".
Yo, por ejemplo, cuando intenté instalar la versión 1.9.3-head, obtuve el siguiente error:

Installing Ruby from source to: /home/nikito/.rvm/rubies/ruby-1.9.3-head, this may take a while depending on your cpu(s)...

ruby-1.9.3-head - #fetching
HEAD is now at 65d88f9 merge revision(s) 35221:
From git://github.com/ruby/ruby
* branch ruby_1_9_3 -> FETCH_HEAD
Already up-to-date.
Copying from repo to src path...
Patch 'xcode-debugopt-fix-r34840' not found.
ruby-1.9.3-head - #autoreconf
ruby-1.9.3-head - #configuring
ruby-1.9.3-head - #compiling
Error running 'make ', please read /home/nikito/.rvm/log/ruby-1.9.3-head/make.log
There has been an error while running make. Halting the installation.

En el log del make tenía esto:

[2012-04-03 11:29:55] make
CC = gcc
LD = ld
LDSHARED = gcc -shared
CFLAGS = -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=implicit-function-declaration -fPIC
XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT
CPPFLAGS = -I. -I.ext/include/i686-linux -I./include -I.
DLDFLAGS = -Wl,-soname,libruby.so.1.9
SOLIBS = -lpthread -lrt -ldl -lcrypt -lm
compiling main.c
compiling dmydln.c
compiling dmyencoding.c
compiling version.c
compiling dmyversion.c
generating miniprelude.c
executable host ruby is required. use --with-baseruby option.
make: *** [miniprelude.c] Error 1

Así que lo que hice, es desistir de instalar la ruby-1.9.3-head, y optar por instalarme la ruby-1.9.3-p125. Ejecutando:
rvm install 1.9.3

Que se instaló del tirón sin problemas.

martes, 6 de marzo de 2012

Guardar las configuraciones de aliases en cygwin

a) Sólo para el usuario actual

asumiendo que se usa Bash
modificar .bashrc en el directorio home

b) para todos los usuarios del pc

crear/modificar
/etc/profile.d/alias.sh

Los script en /etc/profile.d/ se ejecutan para todos los perfiles.

De esta forma, por ejemplo puedo guardar el alias que he creado para el ejecutable 'gem' (de ruby). Sin ese alias, al intentar ejecutar gem desde la consola de cygwin, me saltaba este error:
C:\Ruby193\bin\ruby.exe: No such file or directory -- /cygdrive/c/Ruby193/bin/gem (LoadError)

Así que cree un alias en cygwin, que apunta 'gem' al ejecutable:
alias gem='C:/Ruby193/bin/gem'

Para que ese alias se cargue cada vez que abro una consola de cygwin, metí su definición como script, dentro del directorio: [directorio de instalación de cygwin]/etc/profile.d/