A veces se requiere crear pdfs apartir de los htmls según lo que paso aca, para que nuestras vistas en rails al acceder a ellas via .pdf algo asi como ventas/1.pdf por dar un ejemplo, solo con el hecho de instalar el pdfkit te ayuda con esa tarea, pero ojo como pdfkit utiliza wkhtmltopdf entonces primero se tiene que instalar esta libreria pero esta libreria a su vez requiere xserver entonces se tiene que instalar las librerias del cliente xserver bueno vamonos por pasos.

Primero instalar el xserver para esto ejecutamos esta linea

apt-get install xvfb

Ya con esto no saldra este error: wkhtmltopdf: cannot connect to X server

bueno ahora sigue instalar el wkhtmltopdf para esto hay 3 opciones segun la pagina oficial pero utilizaremos la de ubuntu por que somos cholos entonces ejecutamos

apt-get install wkhtmltopdf

Despues creamos un archivo que se llame wkhtmltopdf.sh en la carpeta /usr/bin/ que contenga el siguiente comando ‘xvfb-run –server-args=”-screen 0, 1024x768x24″ /usr/bin/wkhtmltopdf $*’

vi /usr/bin/wkhtmltopdf.sh
xvfb-run --server-args="-screen 0, 1024x768x24" /usr/bin/wkhtmltopdf $*

Bueno las opciones son para que sea la pantalla 0, de resolucion 1025×768 de 24 pulgadas.

Guardamos y le asignamos permisos de ejecucion y creamos un link simbolico a /usr/local/bin/wkhtmltopdf:

chmod a+x /usr/bin/wkhtmltopdf.sh
ln -s /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf

y hacemos una prueba para ver si wkhtml quedo bien configurado

wkhtmltopdf http://www.google.com output.pdf

Ahora solo falta configurar el pdfkit esto esta mas facil, agregas al gemfile

gem 'pdfkit'

y ejecutas:

 bundle install

En nuestro archivo application.rb agregamos estas lineas

require 'pdfkit'
config.middleware.use PDFKit::Middleware

Tambien para modificar las opciones de pdfkit crea un archivo pdfkit.rb en la carpeta initializers de rails:

# config/initializers/pdfkit.rb
PDFKit.configure do |config|
  config.wkhtmltopdf = '/path/to/wkhtmltopdf'
  config.default_options = {
    :page_size => 'Legal',
    :print_media_type => true
  }
  # Use only if your external hostname is unavailable on the server.
  config.root_url = "http://localhost" 
end

Listo reinicias el servidor y ya debería de funcionar.

Documentacion de pdfkit
Script de wkhtmltopdf

Cualquier duda en los comentarios.

Godieboy ©

Un dia tube la necesidad de mostrar un archivo en vez de una vista en rails por que se generan y se guardan para no usar procesamiento del servidor solo ocupaba leer ese archivo y mostrarlo tal cual sin ningún tipo de modificación, mi archivo era xml yo tenia una vista xml, por si no se generaba el archivo mostraba la vista y ahi si usaba poder de procesamiento del servidor pero bueno para renderizar un archivo se tiene que hacer lo siguiente:

  1. Que el archivo exista
  2. Comprobar que tipo de archivo es
  3. Renderizar

Mas o menos son los pasos que tenemos que seguir bueno aqui va el codigo:

 

    file_path = "#{Rails.root}/public/{@post.title}.xml"
     xml_file = File.new(file_path, 'r') if File::exists?( file_path )

respond_to do |format|
    if !xml_file
        format.xml 
      else
        extname = File.extname(xml_file)[1..-1]
       mime_type = Mime::Type.lookup_by_extension(extname)
      content_type = mime_type.to_s unless mime_type.nil?
       format.xml {render :file => file_path, :content_type => content_type}

        end
end

Bueno explicado por lineas seria algo asi

     file_path = "#{Rails.root}/public/{@post.title}.xml"
     xml_file = File.new(file_path, 'r') if File::exists?( file_path )

Tenemos la ruta del archivo y luego preguntamos si existe si existe la variable xml_file tendra el contenido del archivo de lo contrario false.

if !xml_file
        format.xml 

Si no existe el archivo tendremos que procesar los datos en la vista.

        extname = File.extname(xml_file)[1..-1]

Extramos la extencion del archivo en este caso es un xml.

            mime_type = Mime::Type.lookup_by_extension(extname)
          content_type = mime_type.to_s unless mime_type.nil?

obtenemos el tipo de de mime es osea algo asi para saber si es xml y el content_type para ver si el contenido es efectivamente un xml.

format.xml {render :file => file_path, :content_type => content_type}

Al final renderizamos el archivo enviando la ruta(file_path) y el tipo de contenido(content_type)

Listo

Godieboy ©

ruby hardway

La filosofia hardway(camino dificil) es la unica manera de aprender un lenguaje de programacion por que te tienes que meter a hacer ejercicios como cuando recien empiezas a programar en cualquier lenguaje empiezas con cosas bien faciles y basicas pero esas cosas se vuelven en la base para hacer cosas mas complejas y asi lo aprendes utilizar.

Como los lenguajes de programacion no son iguales pero se parecen mucho te podrias saltar algunas unidades si ya eres conocedor de programacion pero la recomendacion que te dan es que sigas los ejercicios desde cero pero ya es tu opcion si quieres brincarte o no.

Basicamente se trata de copiar y escribir el codigo no copiado con control+c si no que tu teclees todo lo que estas viendo en la pantalla para que te vayas acostumbrando obviamente tambien tienes que usar la logica.

Es sencillo el ejercicio viene lo que tienes que hacer y como hacerlo para que no batalles tanto al final te dicen que hagas ejercicios para que te equivoques y corrijas y asi aprenderas a programar en ese lenguaje.

Si ya sabes un lenguaje o 2 por que no aprender 3 o 4 o mas, un consejo que os doy programadores no se casen con un lenguaje de programacion aunque este bien chulo por que luego solo piensas para ese lenguaje, bueno y si ya lo puedes resolver en un lenguaje de programacion por que no pasarlo a otro, bueno enfoquense mejor en hacer la solucion en su cabeza con pseudocodigo o algo asi jajaja esto ya no tiene nada que ver con el tema.

Bueno aprende ruby de la manera dificil entonces y se feliz.

link http://ruby.learncodethehardway.org/

 

Tambien puedes aprender python , C y sql 🙂

Godieboy ©

Try Ruby

Try Ruby

Si quieres iniciarte en ruby este curso interactivo es lo que ocupas ya que te va guiando y diciendo mas o menos lo que necesitas hacer a demás de que esta bien explicado del por que de las cosas, yo ya lo hice y ruby me parece un lenguaje de programación muy poetico jaja, bien tipo lenguaje natural por sus metodos, programas como si le hablaras a la maquina eso me pareció que estaba haciendo, ya lo veran cuando hagan el tutorial interactivo en http://tryruby.org.

Ya teniendo una noción de ruby puedes aprender ruby on rails en eso es lo que ando ahora pero mientras hagan el tutorial de ruby para que vayan entiendo un poco del leguaje y si les gusta pues luego aprenden ruby on rails.

 

Godieboy ©