miércoles, 20 de diciembre de 2017

App sencilla con Ruby




Vamos a instalar la gema rack

gem install rack

Debe salir


Successfully installed rack-2.0.3
Parsing documentation for rack-2.0.3
Done installing documentation for rack after 2 seconds
1 gem installed


Documentación


La gema nos pide que devolvamos un Proc, el cual recibe una variable de entorno “env” en la cual recibe todo lo que tenga la petición del lado del cliente para poderlo usar como necesitemos

Dentro de la carpeta del proyecto creamos una que se llame ruby_web y dentro un archivo llamado config.ru


En el archivo config.ru, ponemos lo siguiente

run Proc.new {|env| [200, {}, ['Hola mundo']]}


En el terminal entro a la carpeta ruby_web y escribo

$rackup config.ru

a lo cual devuelve el puerto localhost:9292

al entrar debe aparecer hola mundo


ahora modificamos el código y decimos que si tiene alguna información nos devuelva no se encuentra la pagina, así


run Proc.new {|env|
  if env['PATH_INFO'] == '/'
    [200, {}, ['Hola mundo']]
  else
    [404, {}, ['No existe esta página']]
  end
}


al entrar al puerto localhost:9292/hola
devuelve no existe esta pagina


Ahora vamos a crear una clase llamada Application, y dentro un método que se llame call, este método se llama asi porque en la documentación dice lo siguiente

To use Rack, provide an "app": an object that responds to the call method, taking the environment hash as a parameter, and returning an Array with three elements:

Ahora refactorizamos nuestro código poniendo la lógica dentro del método de la clase


class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      [200, {}, ['Hola mundo']]
    else
      [404, {}, ['No existe esta página']]
    end
end

run Application



Creamos un archivo llamado application.rb

 Y dentro ponemos


class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      [200, {}, ['Hola mundo']]
    else
      [404, {}, ['No existe esta página']]
    end
end


y en config.ru

Require ‘/application.rb’
Run Application


Creamos un archivo index.html.erb

Erb es una clase que permite decodificar nuestro código en ruby, es decir primero ejecutarlo en ruby y una vez que tengamos el resultado lo muestra en el archivo



Dentro de index

<h1>Hola</h1>
<%= 2 + 3 %>


dentro de config.ru

require './application'
run Application


dentro de application.rb

require 'erb'

class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      body = ERB.new(File.read('index.html.erb'))
      [200, {}, [body.result]]
    else
      [404, {}, ['No existe esta página']]
    end
  end
end




Usar una API


añadimos @mensaje y dentro de result ponemos binding, esto quiere decir que podemos obtener este “mensaje” desde nuestro archivo index.html.erb



require 'erb'

class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      @mensaje = 'Hola mundo'
      body = ERB.new(File.read('index.html.erb'))
      [200, {}, [body.result(binding)]]
    else
      [404, {}, ['No existe esta página']]
    end
  end
end



en index ponemos

<h1>Hola</h1>
<%= @mensaje %>


Vamos a obtener datos de una API json


vamos a hacer uso de una gema llamada httparty



Vamos a la consola y ejecutamos

$gem install httparty


en application.rb

require 'httparty'



Vamos a incluir el archivo json

En index lo visualizamos

<h1>Hola</h1>
<%= @posts %>


pero lo llamamos en application.rb

require 'erb'
require 'httparty'

class Application
  def self.call(env)
    if env['PATH_INFO'] == '/'
      url = 'http://jsonplaceholder.typicode.com/posts'
      response = HTTParty.get(url)
      @posts = JSON.parse(response.body)     
      body = ERB.new(File.read('index.html.erb'))
      [200, {}, [body.result(binding)]]
    else
      [404, {}, ['No existe esta página']]
    end
  end
end


cuando no ponemos el = en <%= %>
esta sentencia no imprime lo que retorna

en index

<h1>Hola</h1>
<% @posts.each do |post| %>
  <h2><%= post['title'] %></h2>
  <p><%= post['body'] %></p>
  <hr>
<% end %>






Hacer deploy

Vamos a usar heroku


para Mac

$brew install heroku

Debemos loguearnos

$heroku login

(debemos estar previamente registrados)

$heroku créate ruby-web-camilo

MacBook-Pro-de-camilo:ruby_web camiloandresibarrayepes$ heroku create ruby-web-camilo
Creating ruby-web-camilo... done
https://ruby-web-camilo.herokuapp.com/ | https://git.heroku.com/ruby-web-camilo.git
MacBook-Pro-de-camilo:ruby_web camiloandresibarrayepes$

Nos de el dominio a donde debemos entrar


También nos crea un remote dentro de git

$git remote

heroku


hacemos un push

$git push heroku master

nos da error porque no tenemos registrado el ssh

cd ~

atom .ssh/id_rsa.pub

busco 

ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQCv9BWiNqlrwXSTt88CsG5m1t/0yiJDqRnLQSrbujRmT4f/qAiwjdzPsmUfkQYIfsTbHBnmOIbfiAyIBwSVMMSH/MuhJAB42pjc1tKnB1sA2YTc9M9WDhvQKzcqMI5e1QmCDyK........

un codigo similar a ese, el cual es la clave ssh


voy a heroku en mi cuenta



y la agrego

hacemos $git push heroku master


nos da error diciendo que no encuentra un Gemfile.lock

para esto instalamos la gema bundler


$gem install bundler


y tecleamos el comando

$bundle install


lo cual permite instalar las gemas localmente y crear el Gemfile.lock

después podemos ver que ya lo creo, tecleando

$git status


vemos que se agregó Gemfile.lock, para eso hacemos commit


$git add .

$git commit –m “instalar gemas desde bundler”


ahora si podemos hacer push


$git push heroku master



Ahora ya esta subida nuestra app en ruby






1 comentario:

  1. youtube channel: videos youtube channel : - Videoodl.cc
    youtube channel: videos youtube channel. youtube channel: videos youtube channel youtube channel: videos youtube channel: videos youtube channel: videos youtube channel: videos youtube channel: videos channel: youtube video to mp3 videos youtube channel: youtube channel:

    ResponderEliminar