Repositorio de ideas
scripting
Bundler gem and Daemons error (The default Gemfile was not found)
Feb 12th
Some days ago we deployed an application with rails, in this application we are using some daemons (with daemons gem) to take care about some business processes, and recently to have more control with all gems used by our application we started to use bundler.
Almost all was done, so, at the moment to start the daemons, we get the following error:
/usr/lib/ruby/gems/1.8/gems/bundler-0.9.3/lib/bundler.rb:122:in `default_gemfile': The default Gemfile was not found (Bundler::GemfileNotFound) from /usr/lib/ruby/gems/1.8/gems/bundler-0.9.3/lib/bundler.rb:64:in `setup'
So, looking for this error in google we didn’t get anything, and looking into the bundler gem code the solution to this problems was:
ENV['BUNDLE_GEMFILE'] ||= File.join(Dir.pwd, 'Gemfile')
The complete daemon code here:
Hace algunos días hicimos el deployment de una aplicación con rails, con esta aplicación corremos algunos demonios (con la gema daemons) que se hacen cargo de algunas operaciones de negocio, y recientemente para tener más control de las gemas que utilizamos empezamos a usar bundler.
Ya se tenía todo listo, al momento de correr los demonios nos encontramos con el siguiente error:
/usr/lib/ruby/gems/1.8/gems/bundler-0.9.3/lib/bundler.rb:122:in `default_gemfile': The default Gemfile was not found (Bundler::GemfileNotFound) from /usr/lib/ruby/gems/1.8/gems/bundler-0.9.3/lib/bundler.rb:64:in `setup'
Cabe mencionar que buscando en google no se encontró nada de como resolver el problema, así que indagando un poco en el código de bundler, llegamos a la siguiente solución, que fue agregar la siguiente línea al código que levanta nuestro demonio.
ENV['BUNDLE_GEMFILE'] ||= File.join(Dir.pwd, 'Gemfile')
El código completo del demonio es el siguiente:
Mostrando el branch de git en el prompt de la consola
May 20th
Mostrando el branch de git en el prompt de la consola (In english below)
Tiene aproximadamente dos meses que empecé a trabajar con git, y la experiencia ha sido muy buena, bastante interesante, pero con los primeros tutoriales que empecé a ver noté que los aliases ayudan a hacer más ágil el trabajo con git, curiosamente hasta este momento no los he usado, creo que ha llegado la hora de agregarlos en mi configuración. Así que al final de mi archivo $HOME/.gitconfig agrego:
[color] ui = auto [alias] ci = commit co = checkout st = status
Por cierto, que la parte de [color] es para mostrar con colores mis cambios cuando le doy git status, aunque ahora con estos cambios ya le podría dar git st.</p> <p>Otra cosa que noté en mis inicios con git fue que en un screencast de peepcode, en el prompt de la consola aparecía el branch en el que se encontraba trabajando, en ese entonces busqué como hacerlo pero no tuve éxito hasta ahora, entonces para lograr esto hay que agregar un archivo con funciones .bash_functions
# git-related functions in here git_branch () { GIT_BRANCH="$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')" if [[ -n "$GIT_BRANCH" ]] ; then echo ":($GIT_BRANCH) " fi } empty_branch () { name="$1" if [[ -n "$name" ]] ; then echo "This will create a new empty branch in the current" echo -n "git repository called '${name}' ... Continue? [y/N] " read VERIFY if [[ "$VERIFY" = "Y" || "$VERIFY" = "y" ]]; then echo "creating branch '$name'" git symbolic-ref HEAD refs/heads/$name rm .git/index git clean -fdx echo "you should be on your new empty branch! " echo "add/commit files as usual! " echo "( your new branch will show up after you commit something to it )" else echo -n "" fi else echo "Creates a new empty branch in your git repository." echo "" echo "Usage: empty_branch [name_of_new_branch]" fi } # vim:set ft=sh:
Y dependiendo del archivo de configuración del shell que estén usando agregar en él esto:
# if .bash_functions if a file then source it # if .bash_functions is a directory, then sourec all its files if [ -f ~/.bash_functions ]; then . ~/.bash_functions fi if [ -d ~/.bash_functions ]; then for function in ~/.bash_functions/*; do . $function; done fi # bash prompt prompt () { PS1="\[\e[34m\]\u\[\e[37m\]@\[\e[36m\]\h\[\e[37m\]:\[\e[31m\]\w\[\e[37m\]$(git_branch)$ " } PROMPT_COMMAND=prompt export PROMPT_COMMAND
En mi caso, en leopard yo estoy usando .profile, pero podría ser .bash_rc o algún otro profile de shell. Ya para cargar la info del profile habría que ejecutar source .profile ó bien salirse de la consola y volverla a abrir para que cargue la nueva configuración.
Todavía falta mucho por aprender de git, pero creo que voy por buen camino, también he aprendido bastante de los flujos que siguen algunos equipos de trabajo ágiles, son muy interesantes.
Recursos:
Aliases
.bash_functions file from Remi
.bash_rc file from Remi
Git workflow for agile teams
Showing the git branch in the console prompt
I have working with git since started two months ago, the experience have been too good, I must say awesome, when I started to work I saw that you could use aliases with git, it is funny but since then I’ve never used aliases, so now it’s time to add them to my configuration file $HOME/.gitconfig
[color] ui = auto [alias] ci = commit co = checkout st = status
This [color] section enable colors when I execute git status and see my changes, but now with my aliases I could write git st.</p> <p>Another nice stuff that I noticed when started to work with git and I was watching a Peepcode screencast was that in the console prompt appeared the git branch, in that moment I googled it but no results got, until now that I found how to do this; one file with the git functions is created .bash_functions
# git-related functions in here git_branch () { GIT_BRANCH="$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')" if [[ -n "$GIT_BRANCH" ]] ; then echo ":($GIT_BRANCH) " fi } empty_branch () { name="$1" if [[ -n "$name" ]] ; then echo "This will create a new empty branch in the current" echo -n "git repository called '${name}' ... Continue? [y/N] " read VERIFY if [[ "$VERIFY" = "Y" || "$VERIFY" = "y" ]]; then echo "creating branch '$name'" git symbolic-ref HEAD refs/heads/$name rm .git/index git clean -fdx echo "you should be on your new empty branch! " echo "add/commit files as usual! " echo "( your new branch will show up after you commit something to it )" else echo -n "" fi else echo "Creates a new empty branch in your git repository." echo "" echo "Usage: empty_branch [name_of_new_branch]" fi } # vim:set ft=sh:
And depending which shell are you using you add this into it
# if .bash_functions if a file then source it # if .bash_functions is a directory, then sourec all its files if [ -f ~/.bash_functions ]; then . ~/.bash_functions fi if [ -d ~/.bash_functions ]; then for function in ~/.bash_functions/*; do . $function; done fi # bash prompt prompt () { PS1="\[\e[34m\]\u\[\e[37m\]@\[\e[36m\]\h\[\e[37m\]:\[\e[31m\]\w\[\e[37m\]$(git_branch)$ " } PROMPT_COMMAND=prompt export PROMPT_COMMAND
I’m using .profile in leopard, but could be .bash_rc. Now to load this new changes from your profile it’s need to execute source .profile or you also could close your console window and open a new one.
I’ve learned a lot until now but I still need to learn more (even english
), I’ve learned also from agile workflows that helps with your work.
Notes:
Aliases
.bash_functions file from Remi
.bash_rc file from Remi
Git workflow for agile teams
Another note:
This is my first try to write in english, I definitely need to learn to be more fluid in my english writing also speaking, but it’s needed to start in some place. So if this is not understandable you can give some feedback, thanks.
Desarrollando en Rails con Vim
Dec 14th
Cuando empecé a meterme con Rails me encontré con que había unos cuantos IDE’s para desarrollar en este framework y algunos editores, digo como desarrollador de Java era obvio que esperaba un IDE y los disponibles eran o son Netbeans, Aptana, Komodo y editores como JEdit, TextMate, Vim, Emacs, de los cuales el que de plano vi que era muy usado era el TextMate, en cada screencast que me encontraba veía que lo usaban, sólo había un problema, y digo un problema para mi, era que no era gratuito.
Al ver esto me preguntaba porque era más usado un editor de texto turbocargado con comandos en la consola y no un IDE, y la respuesta de los expertos era que con la consola de comandos y un editor se tiene más control sobre el proyecto además de la experiencia que esto te deja en lugar de dejar a que el IDE automatice todo.
Pues bien, debido a una cuestión de $$ me puse a usar un rato Aptana y JEdit, con los cuales tuve buenas experiencias, pero recientemente vi el post de un experto en Rails, creador de Capistrano, Jamis Buck y que venía de trabajar con TextMate durante algunos años pero que previamente había trabajado con Vim, y que ahora estaba moviéndose de nueva cuenta a Vim. Jamis Buck como experto en Rails y TextMate, ahora que se estaba moviendo creó un plugin para Vim para tener ciertas funciones que TextMate tiene. Así es que cuando vi este post dije “de aquí soy”.
Vim siempre ha sido un editor muy poderoso, el cual he usado por años pero no como un usuario experto, porque la verdad tiene un buen de comandos, pero ahora estoy tratando de subirme en él para los desarrollos en Rails que estaré haciendo.
Con el post de Jamis Buck y el plugin que hizo (FuzzyFinder_TextMate que extendió de FuzzyFinder) y a todas las respuestas que recibió en su blog, es como he levantado mi ambiente con Vim, en este caso lo he hecho en la Mac, pero en Linux deber ser casi igual.
En Leopard primero que nada me instalé MacVim bajándolo de http://code.google.com/p/macvim/ y después con ayuda de los posts de Jamis Buck y de los comments ahí puestos logré levantar mi ambiente (Coming home to Vim y Vim Follow-up), también en los comments de estos posts encontré a una persona que puso en github su configuración de vim al igual que sus plugins de vim, que por cierto fue de bastante ayuda (http://github.com/manalang/vim-config/tree/master). Se que en internet hay muchos recursos sobre comandos de Vim, pero aquí está uno que me encontré
http://rayninfo.co.uk/vimtips.html

En resumen, Vim es un editor muy potente, tan potente que se pueden hacer cosas que talvez en un IDE no se puedan hacer, para muestra este video.
Como obtener en bash scripting el valor de una variable que está como valor de otra variable
Dec 5th
Si, así como lo leen, ¿Cómo obtener el valor de una variable cuyo nombre a su vez es el valor de otra variable?, ¡pero que demon…! ¿Quien querría hacer algo así y con bash scripting? La verdad no se, yo lo iba a utilizar en el trabajo pero ya no fue así, la cuestión es que voy a dejar esto plasmado por si después se me vuelve a ofrecer o igual si a alguien más se le ocurre hacer algo como esto.
Supongamos que yo quiero ejecutar el comando de hostname para obtener el nombre de mi servidor, pero a su vez yo tengo una variable en mi script cuyo nombre es el mismo resultado del comando hostname (que igual y podría ser cualquier otro comando, o cualquier otro resultado, la idea sería tener algo así como variables anidadas).
Pues bien, al ejecutar el comando hostname, el resultado de este comando sería “gandalf”:
jcastaneyra@gandalf:~/My documents$ hostname gandalf
Y mi script tendría algo así:
jcastaneyra@gandalf:~/My documents$ cat test.sh #!/bin/bash gandalf="El nombre de mi server esta chido" echo "Ejecutando el comando hostname" result=`hostname` echo ${result} otro=`eval echo '$'${result}` echo $otro
Y al ejecutar mi script obtendría:
jcastaneyra@gandalf:~/My documents$ ./test.sh Ejecutando el comando hostname gandalf El nombre de mi server esta chido
Analizando el script, tenemos que se define una variable gandalf con la cadena “El nombre de mi server esta chido”, al ejecutar el comando hostname, el resultado es guardado en la variable result y después es desplegada, con la línea
`eval echo '$'${result}`
se evalúa la expresión que hace un echo de la variable
result
que a su vez tiene un valor
gandalf
y que a su vez tiene la cadena “El nombre de mi server esta chido”.
Con esto obtenemos el valor de la variable gandalf que a su vez es el valor de la variable result, como dije en un principio algo así como variables anidadas en bash scripting.

