martes, 1 de mayo de 2012

Sun JDK 6 en Ubuntu 12.04 (Precise Pangolin)

Se supone que la forma más facil es a través de PPA pero al parecer por disposiciones legales en cualquier momento dejará de estar disponible este package por lo que la recomendación es instalarlo manualmente.
Y como se hace?
  1. Descargamos el jdk desde el sitio de Oracle.
  2. Le damos permisos de ejecución al archivo
    chmod +x jdk-6u32-linux-x64.bin
  3. Ejecutamos el archivo
    ./jdk-6u32-linux-x64.bin
  4. Lo movemos a la carpeta de maquinas virtuales java
    sudo mv jdk1.6.0_32 /usr/lib/jvm/
  5. Le indicamos al sistema donde puede encontrar los ejecutables de java
    sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_32/bin/javac 1
    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_32/bin/java 1 
  6. Escogemos estos ejecutables como los usados por defecto
    sudo update-alternatives --config javac
    sudo update-alternatives --config java
  7. Verificamos que funcione
    java -version

miércoles, 18 de abril de 2012

Como utilizar spree en heroku

Spree es una plataforma de comercio electrónico, para más información presiona aqui. Heroku es una plataforma para aplicaciones en la nube.

Hasta ahi todo facil, resulta que spree en su configuración por defecto (de hecho está quemado en el código) solo permite grabar las imagenes de productos de forma local, pero en cambio heroku no permite guardar archivos en disco (el sistema de archivos para las aplicaciones es de solo lectura).

Entonces. ¿Cómo hago para usar mezcladas estas 2 plataformas?

Pues bueno, es fácil (relativamente), toca configurar la aplicación para que use algun servicio de hospedaje en la nube (en mi ejemplo usaré Amazon S3) y modificar un poco la gema de spree (sobreescribir los modelos que tengan attachments) y pues estos son los pasos:
Creamos una aplicación de ejemplo (en el momento de escribir esto spree solo funciona con rails 3.1 (desde 3.1.1 hasta 3.1.4)

rails new ejemplo_spree
cd ejemplo_spree

Crea la base de datos (como por defecto rails usa SqLite pues no toca configurar nada)

rake db:create

Instala la gema de spree
 
gem install spree

Instala spree en tu aplicación

spree install --auto_accept

Hasta aquí, spree debería estar funcionando por lo que levanta el server para la app y verifica (http://localhost:3000)

rails s

Bueno, ahora como hacer que la aplicación funcione en heroku?

Crea un initializer y pon el siguiente código:

Spree::Image.class_eval do
    definition = self.attachment_definitions[:attachment]
    definition.delete :url
    definition[:path] = definition[:path].gsub(':rails_root/public/', '')
    definition[:storage] = 's3'
    definition[:bucket] = ENV['S3_BUCKET']
    definition[:s3_credentials] = {:access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET']}
  end

  Spree::Taxon.class_eval do
    definition = self.attachment_definitions[:icon]
    definition.delete :url
    definition[:path] = definition[:path].gsub(':rails_root/public/', '')
    definition[:storage] = 's3'
    definition[:bucket] = ENV['S3_BUCKET']
    definition[:s3_credentials] = {:access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET']}
  end

Lo hice separado para cada modelo para tratar de hacerlo más entendible pero no te olvides de usar DRY.

Aqui viene la primera inquietud (supongo): ¿y esas variables de ambiente ENV[xxx] como las seteo en heroku? pues bueno dentro de unas cuantas líneas responderé esa inquietud

Ahora toca agregar a la aplicación las gemas para Amazon S3 por lo que edita el Gemfile y agrega:

gem 'aws-s3'
gem 'aws-sdk'

instalamos las gemas

bundle install

Heroku utiliza git como repositorio para el código por lo que hacemos un repositorio para nuestra applicación y la creamos en heroku:

git init
git add .
git commit -m "Primer commit"
heroku create ejemplo_spree
git push heroku master

Al ser un proceso interactivo la creación de los datos iniciales de spree, la forma más facil de replicarlos en heroku es copiando los datos locales:

gem install tap
heroku db:push
heroku restart

Configuramos las variables de ambiente en heroku:

heroku config:add S3_KEY=el_key S3_SECRET=el_password S3_BUCKET=el_bucket

Habilitamos a heroku para que use sendgrid para enviar correos:

heroku addons:add sendgrid:starter

hasta ahi, la aplicacion deberia funcionar.

Ahora el problema es que las imágenes de las migraciones fueron creadas localmente, como las veo desde mi aplicación en heroku?

Sube las imagenes ubicadas en root_app/public/spree a tu cuenta de amazon en el bucket asignado para la aplicación y listo.

Y bueno eso es todo. Ahora deberias tener una aplicación usando spreed y que funcione en heroku.

miércoles, 20 de abril de 2011

Como instalar Ruby 1.9.2 usando rvm en Ubuntu 10.10

Este post será bastante consiso, las instrucciones son las siguientes: 1. Necesitas tener instaladas ciertas librerias:
sudo apt-get install build-essential git-core curl
2. Descargas y ejecutas la instalación de RVM
bash < <(curl -s https://rvm.beginrescueend.com/releases/rvm-install-head)
3. Agregas en ru archivo .bashrc la configuración de RVM
echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc
4. En un nuevo terminal (se necesita para que cargar la configuración de RVM) ejecutas lo siguiente:
rvm notes
5. Instalas los paquetes que te recomienda RVM
sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev
6. Instalas la versión de ruby que necesitas (en mi caso la 1.9.2)
rvm install 1.9.2
7. Para usar una versión en particular ejecuta lo siguiente:
rvm use 1.9.2
8. Para hacerla la versión por defecto ejecuta lo siguiente:
rvm --default use 1.9.2
Eso es todo

viernes, 1 de abril de 2011

Creando un Rails 3 Engine - Parte 2

Creando el proyecto

La forma más facil de comenzar con la creación de la gema es utilizando Jeweler. En el caso de no tener la gema instalada ejecutamos lo siguiente:
gem install jeweler
Luego de lo cual procedemos a crear el proyecto con el siguiente comando:
jeweler nombre_de_nuestra_gema
Nota: Jeweler está muy atado a git por lo que te pedirá algunos datos de git para crear el proyecto.

Como apenas estoy comenzando en esto de la creación de "Engines" algunas cosas que pone Jeweler en el proyecto por defecto no me sirven o me "estorban". Lo mínimo que se necesita para el proyecto es la siguiente estructura:
proyecto
  lib
    proyecto.rb
  Rakefile
proyecto se refiere al nombre de tu gema.

El archivo Rakefile es utilizado por jeweler para generar la gema, tiene una estructura muy parecida a la de .gemspec Un ejemplo:
begin
  require "jeweler"
  Jeweler::Tasks.new do |gem|
    gem.name = "project name"
    gem.summary = "Is just a test"

    gem.files = Dir["{lib}/**/*", "{app}/**/*", "{config}/**/*"]

  end
rescue
  puts "Jeweler or one of its dependencies is not installed."
end
Para empaquetar e instalar nuestra gema utilizamos el siguiente comando:
rake install
Bueno eso es todo por el momento. Esperen la siguiente entrega

Creando un Rails 3 Engine - Parte 1

En estos momentos ando dedicado a crear un "Rails 3 Engine". Y qué es esa vaina? pues es crear una aplicación que se pueda usar dentro de otra aplicación, sería como crear un .dll para una aplicación windows o un .jar para una aplicación java. En este caso es crear una gema ya que estamos trabajando en Ruby. El proceso es relativamente fácil, en esta serie de posts pues iré dando el paso a paso de como hacerlo.

Requerimientos
  • Rails 3. - Se puede hacer en rails 2 pero tengo entendido que Rails 3 tiene algunas facilidades en la creación y utilizacion de "Engines".
  • Jeweler. - Es una gema que facilita la creación de gemas.
  • Haml. - El futuro en lenguajes declarativos para la creación de interfaces???
  • Git. - Sistema para control de versiones (Jeweler está muy atado a git)
Bueno eso es todo por ahora, en futuras entregas iré poniendo el paso a paso como tal.

lunes, 9 de agosto de 2010

Como utilizar tus servicios virtuales desde otras máquinas usando NAT?

Digamos que tienes algun servicio funcionando en una máquina virtual y quieres que desde otras máquinas se vea, Cómo podrías hacerlo?

La respuesta facil es que tu configuración de red en la máquina virtual utilice "Bridge (Puente)" eso significa que la interfaz de red de la máquina virtual se comporta como una interfaz diferente de tu máquina real. El único problema con esto es que si tienes muchas máquinas virtuales vas a necesitar muchas ip's diferentes.

Y entonces? pues facil puedes utilizar NAT lo que en criollo significa que todas las peticiones van a la interfaz de tu máquina física y se redirecciona basado en "algo" a la máquina virtual correspondiente.

Si estas utilizando VirtualBox con la siguiente instrucción puedes hacer la redirección de la solicitd de red a la máquina virtual:

VBoxManage modifyvm "MV" --natpf1 "iu,p,ipf,pf,ipv,pv"

donde:
mv: Nombre de tu máquina virtual
iu: es un nombre que le das a la redirección bastante util cuando quieres cambiar la configuración de la redirección
p: tcp o udp
ipf: ip de tu maquina real si lo dejas en blanco escucha por cualquier ip (lo mismo que 0.0.0.0)
pf: puerto que se va a abrir en tu máquina real para escucha
ipv: ip de ti máquina virtual, por lo general debes dejarlo en blanco, solo lo utilicas si no está trabajando el servidor de DHCP de VirtualBox
pv: puerto por el que tu servicio está escuchando.

miércoles, 12 de mayo de 2010

Quieres irte al mundial gratis?

Microsoft sacó una promoción bastante interesante, solo tienes que ingresar al siguiente sitio y seguir los pasos:

http://technet.microsoft.com/es-ar/ff621509.aspx

Con eso entras a un sorteo y si ganas te puedes ir al mundial de futbol.

Mucha suerte!!!