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