laferia.cr

Necesidad

En este momento de la historia, en la mayoría de los casos el consumidor no conoce el origen de los productos. Con una plataforma que brinde la posibilidad de compartir información entre productores y consumidores, se pueden solucionar varios problemas que presenta esta cadena de consumo.

Plataforma

Una plataforma, diseñada para compartir información entre productores, proveedores y consumidores, fue creada en Australia por la fundación Open Food Network.

Esta plataforma permite conocer el origen de los productos, la situación del productor, métodos de producción y otros factores que pueden tener alto impacto en la decisión del consumidor de orientarse a un producto o a otro.

IMAGE ALT TEXT HERE

Avance

Por el momento lo que hemos logrado:

  • Comprar el dominio
  • Configurar ofn en ubuntu 14.04
  • Necesitamos alguien con experiencia en ruby y rails para que revise
  • Tenemos un ambiente de pruebas

Instalación

Ambiente de Producción

  1. Agregar el "Host" a la configuración de la Base de datos en config/database.yml:
production:
  adapter: postgresql
  encoding: unicode
  database: open_food_network_prod
  pool: 5
  host: localhost
  username: ofn_user
  password: toor
  1. Crear la base de datos:
/opt/openfoodnetwork/www# RAILS_ENV=production rake db:schema:load db:seed
  1. Precompilar los activos en el ambiente de producción:
/opt/openfoodnetwork/www# RAILS_ENV=production rake assets:clean
/opt/openfoodnetwork/www# RAILS_ENV=production rake assets:precompile
  1. Correr Unicorn en producción manualmente
 cd /opt/openfoodnetwork/www && bundle exec unicorn -c ../shared/config/unicorn.rb -E production -D

Solucion de Problemas

  • Información del Log de Unicorn:
$ tail -f /opt/openfoodnetwork/shared/log/unicorn.log
  • Encontrar la ubicación del Unix Socket en /opt/openfoodnetwork/shared/config/unicorn.rb

  • Verificar que el Unix socket se encuentre creado:

$ ls -lah /tmp/unicorn.openfoodnetwork.sock
  • Verificar que Unicorn esté corriendo:
$ ps aux | grep unicorn

Referencias

(1) http://teotti.com/use-of-rails-environments/ (2) https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-unicorn-and-nginx-on-ubuntu-14-04

Utilizar Nikola por primera vez

Instalación

La forma mas simple de instalar Nikola es con pip y virtual, también se podría utilizar uno de los paquetes de la distribución que se este utilizando, en si son usuarios de Linux.

En el directorio del repositorio del sitio

virtualenv --python=python3 .env
source .env/bin/activate
pip3 install --upgrade "Nikola[extras]"

Primeros usos

En este momento se tiene el sistema instalado, ahora hay que crear el contenido del primer sitio de prueba, estando en el directorio que va a mantener el código, se ejecuta el comando nikola init --demo ., luego se debe de construir el sitio con el comando nikola build.

El siguiente paso es ver el sitio, para lo que va a utilizar el comando nikola serve -b, pero es mucho mas fácil utilizar nikola auto -b para reconstrucciones automáticas.

Utilizar markdown

Para utilizar markdown para crear los post se debe usar uno de los múltiples lenguajes de marcado ligero soportado, para eso se debe de editar el archivo config.py en la raíz del sitio en Nikola.

Primero se debe de verificar que este en la estructura COMPILERS

# 'rest' is reStructuredText
# 'markdown' is MarkDown
# 'html' assumes the file is HTML and just copies it
COMPILERS = {
    "rest": ('.rst', '.txt'),
    "markdown": ('.md', '.mdown', '.markdown'),
    "textile": ('.textile',),
    "txt2tags": ('.t2t',),
    "bbcode": ('.bb',),
    #"wiki": ('.wiki',),
    "ipynb": ('.ipynb',),
    "html": ('.html', '.htm'),
    # PHP files are rendered the usual way (i.e. with the full templates).
    # The resulting files have .php extensions, making it possible to run
    # them without reconfiguring your server to recognize them.
    "php": ('.php',),
    # Pandoc detects the input from the source filename
    # but is disabled by default as it would conflict
    # with many of the others.
    # "pandoc": ('.rst', '.md', '.txt'),
}

Luego se debe de agregar a la estructura del tipo de entrada, en el ejemplo de abajo se agregó la linea, ("posts/*.md", "posts", "post.tmpl") a los dos tipos de entras POST y PAGES.

POSTS = (
    ("posts/*.rst", "posts", "post.tmpl"),
    ("posts/*.txt", "posts", "post.tmpl"),
    ("posts/*.md", "posts", "post.tmpl"),
)
PAGES = (
    ("stories/*.rst", "stories", "story.tmpl"),
    ("stories/*.txt", "stories", "story.tmpl"),
    ("stories/*.md", "stories", "story.tmpl"),
)

Utilizar locales para Costa Rica

Este proceso debería funcionar para la mayoría de idiomas.

  1. Generar el locale necesario con `locale-get
  2. Definir cual es el locale que debe de utilizar Nikola por defecto.
# What is the default language?
DEFAULT_LANG = "es"

# What other languages do you have?
# The format is {"translationcode" : "path/to/translation" }
# the path will be used as a prefix for the generated pages location
TRANSLATIONS = {
    DEFAULT_LANG: "es_CR",
    # Example for another language:
    # "es": "./es",
    "es": "./",
    "en": "./en",
}
  1. Definir el locale que se va a utilizar para es, por defecto es es_ES.
LOCALES = {
        "es":"es_CR.utf-8",
        }

El locale a utilizar puede ser probado, importando locale import locale y llamando al locale necesario locale.setlocale(locale.LC_ALL, 'es_CR.utf-8')

Conectarse a Snappy a través de la consola serial

Estoy trabajando en Snappy Ubuntu con un BeagleBone Black Rev C y un Raspberry Pi 2. Es posible conectarse a los dispositivos a través de la consola serial para monitorear errores durante el arranque y para controlar el sistema. Luego de mi primer cable quemado, decidí escribir las instrucciones para conectar los cables y así reducir la probabilidad de que mis dispositivos prendan fuego.

Lo primero, por supuesto, es instalar snappy en la tarjeta SD. Luego, comprar uno de estos cables FTDI que convierten de USB a serial. Este cable se puede usar en ambos dispositivos porque tiene los conectores separados. El cable negro es tierra (GND), el cable blanco es para recibir datos en el puerto USB, el cable verde es para transmitir datos desde el puerto USB ye el cable rojo es de corriente eléctrica de 5V.

BeagleBone Black

El BeagleBone Black Rev C tiene 6 pines. Hay un punto blanco al lado del primer pin. Conecte el cable negro GND al primer pin, el cable verde al cuarto pin y el cable blanco al quinto pin. En el BeagleBoneNUNCA conecte el cable rojo.

image

image

Raspberry Pi

El Raspberry Pi 2 Model B tiene 40 pines. Aquí hay un bonito dibujo del pinout con los números y las funciones de los pines.

Conecte el cable negro GND al sexto pin, el cable blanco al octavo pin y el cable verde al décimo pin. De forma opcional puede darle corriente al Raspberry conectando el cable rojo al segundo pin, pero si hace esto NO conecte el cable de poder USB porque no es posible usar ambas fuentes de poder.

image

image

Consola serial

Instale screen:

  sudo apt-get install screen

Conecte el otro extremo del cable a un puerto USB de su computadora y busque el nombre del dispositivo tty:

  ls /dev/ttyUSB*

Inicie la sesión de screen en la terminal serial, reemplazando /dev/ttyUSB? con el número de su dispositivo.

  sudo screen {/dev/ttyUSB?} 115200

Por último, inserte la tarjeta SD y conecte el cable de poder de su dispositivo. Ahora podrá ver los mensajes de arranque en la termina, y al final snappy le permitirá inciar la sesión. El usuario predeterminado es ubuntu y la contraseña predeterminada también es ubuntu.

image

Snappy tiene un servidor SSH preinstalado. Una vez que el arranque ha sido exitoso, se puede iniciar sesión a través de SSH, lo que nos da una mejor experiencia. Esta terminal serial se puede usar para obtener la dirección IP del dispositivo:

  ip addr show

Y desde una terminal diferente, reemplazando ip con la dirección IP del dispositivo:

  ssh ubuntu@{ip}

Ahora estamos listos para empezar a jugar con snappy en el dispositivo. No se pierdan del tour.

Para salir de la consola serial, presione CTRL+a y luego k.

Más información sobre los cables y la consola serial