Recuperar el valor del identificador de usuario de analytics

Si queremos recuperar el valor de usuario que ha asignado a un usuario, la libreria de google dispone de una funcion ga(funcion) que define un callback que ejecutará una vez se ha cargado la librería en nuestra página.

En el siguiente ejemplo, recuperarmos el identificador y lo asignamos a un input oculto, para identificar a los usuarios que utilizan un formulario.

<script>
    ga(function(tracker) {
        var clientId = tracker.get('clientId');
        var elem = document.getElementById("userId");
        elem.value = clientId;
    });
</script>

Utilización de byebug y web-console en ruby

Byebug y Web Console son 2 librerias que nos permite debugar el estado de nuestras apps, añadiendo un comando en el punto en el que queremos analizar su estado. La diferencia es que byebug para la app y permite analizarla desde la consola, web-console, crea un terminal virtual en nuestra pagina, que permite realizar comandos ruby. El uso de ambas librerias es muy similar:

Ejemplo byebug

def index
  byebug
  @articles = Article.find_recent

Ejemplo web console

def index
  console
  @articles = Article.find_recent

Enlaces de interes:

Configurando jekyll 3.2

Si vamos a alojar nuestra página creada con Jekyll en github, una primer paso es tener instalada su misma versión de librerias. La versión actual es la 93, que acaba de incluir la version 3.2 de Jekyll.

$ gem install github-pages -v 93

Aprovechando los multiples plugins que dispone jekyll, he dedicido utilizar alguno de los disponibles en Github.

  • Jekyll Sitemap: Genera un sitemap con todos nuestros post y páginas.
gems:
  - jekyll-sitemap

Añadir en la sección de gems del archivo_config.yml

gems:
  - jekyll-seo-tag

Y añadir {% seo %} en nuestro código.

  • Jekyll Archives: Este plugin permite generar distintas paginas agrupando los articulos por tag, categoria, mes o año.

Por desgracia esta gem no esta soportada por Github, por lo que la tendremos que instalar manualmente y realizar un pequeño “hack” para poder utilizarlo en github. Otra alternativa

$ gem install jekyll-archives

Al igual que en el anterior, añadir en la sección de gems del archivo _config.yml y su configuración.

gems:
  - jekyll-archives

jekyll-archives:
  enabled:
    - categories
    - tags
  layout: 'archive'
  permalinks:
    tag: '/archive/tag/:name/'
    category: '/archive/category/:name/'

En nuestro caso, activamos solamente páginas por tag y categoria, y definimos el formato del link y layout.

La solución “low-cost” por la que he optado, es justo antes de realizar la subida a Github, es copiar las páginas generadas por el plugin en local, como si fuera contenido propio.

$ rm -rf archive | cp _site/archive . 

Con este proceso, ya que tenemos dos fuentes (la carpeta copiada y el plugin archives) que generan en la misma ubicación _sites/archive es necesario borrar la carpeta ./archive antes de arrancar el servidor en local para evitar conflictos

Actualizar jekyll a la version 3

Después de un año con el blog parado, he decidido volver a activarlo actualizando a la version 3, aprovechando que github también actualizó las versión de Jekyll que soportaba.

Se pueden consultar las versiones que soporta github en su página de información de plugins

Los cambios principales en esta nueva versión ha sido la reducción de gems que utiliza por defecto, por lo que si queremos ciertas funcionalidades, como la paginación, es necesario añadir la gem en el archivo de configuración _config.yml

# ahora markdown es el procesador por defecto
markdown:         kramdown
# y el syntax highlighting por defecto es rouge, que esta implementado en ruby
highlighter:      rouge
# es necesario poner el jekyll-paginate para tener implementada la paginación
gems: ['jekyll-paginate']

Como configurar unicorn como servidor en rails

Para configurarlo tendremos que poner en el Procfile:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

Añadir a Gemfile:

gem 'unicorn'

Y crear el archivo ./config/unicorn.rb con:

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end