Otras Páginas

Expandir Todo

lanzando_a_heroku.step

h2 do
  span "Si todavía no has lanzado tu aplicación a Heroku, comienza con "
  a 'Configuración inicial', href: '#first-time'
  span ". De otra manera, empieza en "
  a 'Cómo lanzar', href: '#every-time'
  span "."
end

a name: 'first-time'
situation "Configuración inicial" do
  step "Crea una aplicación heroku" do
    console "heroku create"
    message "`heroku create` registra una nueva aplicación en heroku. Al hacer esto deberías ver algunas líneas de salida, incluyendo la URL de tu nueva aplicación."
  end

  step "Edita el Gemfile" do
    important "Cada aplicación tiene su propio `Gemfile`. Asegúrate de que estás abriendo el que corresponde a la carpeta de tu aplicación."

    message "Heroku ejecutará nuestra aplicación un poco diferente a como lo hace nuestra computadora, por lo cual requiere que hagamos uns pequeños cambios a nuestro `Gemfile`."

    message "Abre el archivo llamado `Gemfile` en Sublime Text, o tu editor preferido, y encuentra la siguiente línea:"

    source_code :ruby, <<-RUBY
gem 'sqlite3'
    RUBY

    message "**Elimina esa línea** y reemplázala con:"

    source_code :ruby, <<-RUBY
group :development, :test do
  gem 'sqlite3'
end

group :production do
  gem 'pg'
  gem 'rails_12factor'
end
    RUBY
  end

  step "Procesa los cambios del Gemfile" do
    console "bundle install --without production"
    message "Cada vez que el Gemfile cambia, necesitas ejecutar ``bundle install`` para que los cambios sean procesados. La versión procesada de los cambios es almacenada en otro archivo llamado ``Gemfile.lock``."
  end

  step "Aplica los cambios del Gemfile" do
    message "Ahora hay cambios en el Gemfile y Gemfile.lock que necesitan ser aplicados antes de que podamos enviarlos a Heroku."
    console <<-SHELL
git add .
git commit -m "Gemfile modificado para heroku"
    SHELL
    tip "Hay un punto después de la palabra add en la primera línea."
  end
end

a name: 'every-time'
situation "Cómo lanzar" do
  step "Aplica todos los cambios pendientes en git" do
    message "Heroku sólo recibirá los archivos a los que se les ha aplicado commit dentro de nuestro repositorio local git. Por ello necesitamos asegurarnos de que todos los cambios en los archivos han sido aplicados mediante el comando commit."
    console "git status"
    message "`git status` muestra todos los cambios pendientes. Si no se muestra ningún cambio, ¡estás listo para lanzar la aplicación! De otra manera..."

    console <<-SHELL
git add .
git commit -m "Algún mensaje útil en el futuro"
    SHELL
    message "El mensaje debe destacar lo más importante de los cambios hechos: algo como 'Agregar votos al índice de temas'."
  end

  step "Envía los cambios a Heroku" do
    console "git push heroku master"
    message "Esto toma los cambios aplicados y los envía a Heroku."
  end

  step "Ejecuta las migraciones de la base de datos sobre Heroku" do
    console "heroku run rake db:migrate"
    message "Esto le dice a Heroku que ejecute tus migraciones en su base de datos, similar a cuando se ejecuta rake db:migrate localmente. La base de datos de Heroku es independiente de la que está en tu computadora, lo que significa que debe ser actualizada cada vez que haces cambios a la estructura de tu base de datos. También significa que no verás en Heroku ninguno de los datos que insertaste en la base de datos sqlite3 de tu computadora."
  end

  step "Visita tu aplicación" do
    console "heroku open"
    message "Esto abre la nueva aplicación en tu explorador."
  end
end

explanation do
  message <<-MARKDOWN
  En primer lugar, tuvimos que hacer algo de trabajo para hacer que Heroku se lleve bien con nuestra aplicación. Esto requirió actualizar el Gemfile y empaquetar la aplicación con bundle.

  * El Gemfile es una lista de todas las librerías de Ruby que tu aplicación necesita.
    Lo que hemos declarado aquí es que queremos usar la librería `sqlite3` 
    mientras estamos desarrollando en nuestra computadora (el grupo de desarrollo) pero cuando
    lanzamos a Heroku (el grupo de producción) queremos usar la librería `pg`,
    la cual está hecha para el tipo de base de datos que usa Heroku.

  * Usar bundle es la manera en que los proyectos de Ruby realizan un seguimiento de las gemas que usan. Nosotros decimos
    que se empaquete lo que queremos usar en el `Gemfile`, ahora necesitamos asegurarnos de que esas 
    gemas están instaladas. Dado que no tenemos el mismo tipo de base de datos que Heroku, 
    nos saltamos las gemas de producción. ¡Pero no te preocupes! El bundle guarda los registros, de manera que 
    Heroku instalará las gemas cuando reciba tu código.
  MARKDOWN

  message "Deberías ser capaz de lanzar tu aplicación siempre que esté funcionando adecuadamente. Tu flujo de trabajo típico será el siguiente:"
  img src: "img/workflow.png", alt: "workflow", style: "border: none"
  ol do
    li { message "Agregar o modificar código" }
    li { message "Aplicar los cambios (`git commit`)" }
    li { message "(repetir)" }
  end
  message "Siempre que tus cambios sean aplicados mediante commit, siéntete libre de ejecutar `git push heroku master` Y ¡Pum! ¡Los cambios están en vivo en Heroku!"
end