lunes, 6 de octubre de 2014

Programar con crontab la ejecucion de 2 comandos de forma consecutiva, no concurrente, en Linux

Recientemente he estado trabajando con mi Raspberry pi que por cierto esta muy interesante para hacer cosillas, he estado haciendo un proyecto que próximamente actualizare en mi github y para el cual estoy utilizando una computadora del tamaño de una tarjeta de crédito es decir una Raspberry pi.

Actualmente corriendo Raspbian(version de linux derivada de Debian) tuve la necesidad de ejecutar dos tareas una seguida de la otra y programarlas a cierta hora.

Tenia la opción de crear una schedule (fecha y hora) para ejecutar cada una, sin embargo no quería jugar con el tiempo en que terminara una para que iniciara la otra, sino más bien quería que cuando terminara una iniciara la otra.

Primero lo que queria era cerrar el navegador epiphany (que actualmente fue incluido en la versión de Raspbian) y posteriormente apagar el equipo.

Ejecutando el comando:

crontab -e

se tiene acceso a las tareas programadas, este caso ingrese utilizando sudo pues el comando shutdown es ejecutado por un usuario con privilegios.

sudo crontab -e

Basicamente para lograr que un comando se ejecute terminado el anterior se debe incluir && después de cada comando en la cadena del crontab, para entender mejor les enseño como lo realice yo:

# m h  dom mon dow   command
58 17 * * * /usr/bin/pkill -x epiphany-browse && /sbin/shutdown -h now 

Como se puede apreciar en la linea anterior ejecuto el comando pkill (dar man pkill en consola para saber más de el) y cierro el proceso que corre epiphany-browse una vez que termina de cerrar(matar) el proceso continua con el apagado del equipo.

Como ven es muy sencillo realizar este tipo de ejecución consecutiva de comandos en crontab.

miércoles, 28 de mayo de 2014

Ordenar articulos en Joomla 2.5 cuando parecen estar deshabilitados

Recientemente heredé un web que se encuentra en joomla, cabe aclarar que no soy un experto en el tema de joomla pero mis experiencia como developer me permite entender un poco el CMS ademas de que me he tenido que poner a leer y documentarme.

Solo me gustaria decir que me parece un tanto complicada la forma en que se gestiona Joomla, sin embargo cuando le vas entendiendo se va haciendo menos pesado.

Vayamos al punto...

El problema: 

Me  solicitaron acomodar el órden en que una categoria listaba los articulos, (si parece que no importa y que es algo trivial pero bueno) al intentar lo más lógico como solo cambiar el órden de los articulos de esa categoría me tope con que estaba deshabilitados, o eso parecia, algo así:



Si parece sencillo para los expertos del joomla pero bueno tuve que leer en varios lados y, o no hacia la pregunta correcta a google, o de plano nadie habia tenido ese problema, pero bueno aquí la solución super sencilla.

Solución:

Picandole en el encabezado se habilita la posibilidad de ordenamiento (no se si así se diga) y ya puedes hacer lo que quieras.



Una vez realizada esta acción se habilita la opción de ordenamiento (sort) y a un lado aparece un disco, solo basta cambiar los números y dar en gaurdar (disco que aparece a un lado, que por cierto muchos ya ni los conocieron jeje).


Nota:

Es importante que para que se respete el órden deben ir al administrador de menus elegir el menú en el cual la esta la categoría de la cual quieren órdenar y elegir ese nodo, una vez en esa pantalla, en el lado derecho elegir: "Lista de opciones de diseño" y elegir en la opción orden de artículos: Orden gestor de articulos.



Y eso es todo.

martes, 25 de marzo de 2014

Cambiar automaticamente rvm y gemset al abrir tu proyecto.

Para indicarle a un proyecto que debe utilizar un gemset y ruby version en particular, se debe hacer lo siguiente:

Es posible crear un archivo con el nombre .rvmrc con el contenido de tu gemset y ruby version:


rvm use ruby-2.0.0-p247@miGemset
 
Sin embargo esto no funciona correctamente al utilizar  rbenv o chruby
 
La forma de fijar la version y gemset es posible creando dos archivos:
 
El primero es: 
 
.ruby-version 
 
En el cual se coloca la version de ruby que se utilizara.
 
 1.9.3
 
De igual forma de crea un archivo con el nombre 
 
 .ruby-gemset
 
En el cual se pone el nombre del gemset a utilizar
 
 ej.
 
mi_gemset 
 
rvm ree-1.8.7-2010.02@rails3_project
rvm ree-1.8.7-2010.02@rails3_project
rvm ree-1.8.7-2010.02@rails3_project

miércoles, 9 de octubre de 2013

Configurar Apache2 para utilizar el directorio home de usuario y evitar "dir access forbidden"

Recientemente tuve la necesidad de programar un poco en PHP, y como algunos sabrán, el servidor Web favorito para habilitar PHP es Apache.

Sin embargo por lo general en linux, el directorio en el cual Apache lee los sitios para poderlos mostrar en el navegador, es /var/www un directorio con ciertas restricciones y casi siempre no accesible al usuario que no sea root o al dueño de apache.

Esto es un problema, pues si estas utilizando un sistema de gestión de versiones, es complicado al realizar push, pulls o cualquier cambio utilizar el comando sudo o en su defecto ser usuario root (super usuario), también puedes optar por otra solución, la cual yo utilicé y me harto, esto era tener tu proyecto en tu carpeta donde normalmente los tienes y copiar a /var/www los archivos que quieres mostrar, lo cual es una joda total.

Derivado de esta situación me di a la tarea de buscar como habilitar o configurar un directorio de mi home para que Apache pudiera mostrar en el navegador.

Existe mucha info como hacer esto, es decir, como habilitar el directorio web de los usuarios en linux, sin embargo, después de seguir varios tutoriales, obtenía un horrible ""dir access forbidden".

Bueno ahora la solución:

Mi sistema es xUbuntu, lo cual no debería variar mucho en cualquier distro basada en Debian.

Lo primero es revisar si tenemos habilitado en apache la capacidad de utilizar los directorios de usuario, para esto debemos revisar esto en los directorios mods-available y mods-enabled, el primero nos dice que módulos tenemos disponibles y en el segundo cuales están habilitados.

Demos un:

ls -l /etc/apache2/mods-available

Ahora ubiquemos los módulos que comienzan con userdir.... estos módulos deberían estar habilitados, osea debería aparecer al listar el directorio mods-enabled, para eso revisamos con un ls.

ls -l /etc/apache2/mods-enabled

En caso de que no estén podemos crear un enlace simbólico de la siguiente forma:

sudo ln -s /etc/apache2/mods-available/userdir* /etc/apache2/mods-enabled/

Una vez configurado esto practicamente esta habilitado el módulo para que apache pueda leer los sitios de nuestro directorio de usuario particularmente de la carpeta: public_html de nuestro home.

Ahora falta reiniciar apache para que los cambios surtan efecto.

sudo /etc/init.d/apache2 restart

Ahora es necesario que si no tenemos en el home de nuestro usuario la carpeta public_html la creemos ya que en esta carpeta se va a leer los sitios web del usuario.

La url para leer estos sitios desde el navegador seria: 

http://localhost/~usuario/

en mi caso

http://localhost/~alex/

Ahora si esto les causa algun error con apache sobre permisos, o un forbidden o un "Permission denied: access to", es porque este directorio y nuestro home deben tener ciertos permisos. Basta con darle un chmod a la carpeta y al home de la siguiente forma:

chmod 711 /home/usuario
chmod 711 /home/usuario/public_html

en mi caso

chmod 711 /home/alex
chmod 711 /home/alex/public_html

Si aún con estos cambios se mantiene el problema de permisos, es necesario darle permisos a la carpeta home, de la siguiente forma:

sudo chmod 711 /home

Con esto deberia de funcionar los archivos .html que tengamos en la carpeta public_html, al ingresar a la página: http://localhost/~alex/   claro alex debe ser el nombre de tu usuario.

Para que puedas ejecutar los archivos o proyectos PHP es necesario habilitar apache para esos directorios, esto es muy sencillo, solo debemos ir al archivo:

sudo nano /etc/apache2/mods-enabled/php5.conf

puedes usar vi, vim, sublime o el editor que más te agrade

y comentar lo que aparece en la sección de PHP, de la siguiente forma:


Ahora solo basta con reiniciar Apache y listo, 

sudo /etc/init.d/apache2 restart

ya podemos trabajar desde nuestra carpeta public_html de nuestro home, y hacer commits, ver cambios etc.. sin necesidad de utilizar sudo o ir a /var/www no es como el webrick de rails pero es más cómodo desarrollar así.






Fuentes y enlaces de ayuda:

https://bbs.archlinux.org/viewtopic.php?id=100801
HAbilitar php -> http://ubuntuforums.org/showthread.php?t=1521010
http://ubuntuforums.org/showthread.php?t=1577717
http://huevas.wordpress.com/2007/07/03/habilitar-directorios-de-usuario-en-apache2-userdir/

martes, 24 de septiembre de 2013

Apache, Passenger y multiples versiones de Ruby y Rails con reverse proxyProxyPass

Derivado de una configuración sobre Ubuntu Server, en el cual tengo corriendo diversas aplicaciones con Ruby, las cuales estan en diferentes versiones me tope con el problema de como configurar Apache y passenger.

Buscando en google encontre la siguiente liga, la cual es muy útil: "Phusion Passenger & running multiple Ruby versions" siguiendo la configuración que ahí menciona me tope con un problema.

Apache 403 Forbidden

Para ser breve ire al punto.

Todo se encontraba configurado tal cual menciona el articulo, de la siguiente forma tenia mi configuración de Apache.

"< virtualhost >"
    DocumentRoot /home/alex/proyectos/miapplicacion/public
    PassengerEnabled off
    ProxyPass / http://0.0.0.0:3050/
    ProxyPassReverse / http://0.0.0.0:3050/
"< /virtualhost >"


Sin embargo me decia que no tenia permisos.

Ya se encontraba corriendo passenger stand alone (en el articulo lo menciona) en el puerto 3050.

Encontre la solución moviendo varias cosas:
    1. Verificar si esta correctamente configurado el modulo proxy de apache. 
    El cual en ubuntu se encuentra en: 
      /etc/apache2/mods-available/proxy.conf
        Comente mi anterior configuración y habilite los permisos para el proxy. 
        Quedando de la siguiente manera:


          Con esto deje habilitado mi proxy para todo, 
          puedes restringirlo si así lo consideras.


          2. Después de esto lo unico que resta es activar dicho módulo 
          en caso que no este activo, con la siguiente instrucción (ubuntu):

          sudo a2enmod proxy_http

          3. Reiniciamos Apache 

          sudo /etc/init.d/apache2 restart

          Y Listo!!! Una vez realizado esto, arranco mi app en la version 
          1.9.2 de Ruby y Rails 3.2.14 de Rails.


          Ligas de ayuda: 
          http://blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/
          http://rimuhosting.com/knowledgebase/applications/ruby-on-rails
          http://serverfault.com/questions/242650/setting-up-a-basic-mod-proxy-virtual-host




          miércoles, 21 de noviembre de 2012


          En las peticiones XMLHttpRequest, tenemos varios status cuando el servidor responde, estos son los siguientes:

          readyState The readyState code changes value from 0 to 4 during a request cycle:

          0: not initialized.
          1: connection established.
          2: request received.
          3: processing.
          4: finished and response is ready.

          status
          200: "OK"
          404: Page not found.

          onreadystatechange: callback method assigned via this attribute
          responseText: holds the response data as a string of characters.
          responseXml: holds the response data as XML data.

          Basicamente tenemos los estados 0 no inicializado, 1 conexión establecida, 2 petición recibida,  3 procesando y 4 finalizado y respuesta completa.

          miércoles, 5 de octubre de 2011

          Para que funcione tu .gitignore

          Si creaste tu .gitignore en Git y lo subiste y no te funciona, realiza lo siguiente:


          Just got the answer from the IRC channel.

          Running command:

          git rm -r --cached . 

          This removes everything from the index, then just run:

          git add . 

          Commit it:

          git commit -m ".gitignore is now working"



          Tomado de: http://stackoverflow.com/questions/1139762/gitignore-file-not-ignoring