> For the complete documentation index, see [llms.txt](https://makeitrealcamp.gitbook.io/ruby-on-rails-5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://makeitrealcamp.gitbook.io/ruby-on-rails-5/11-heroku.md).

# Heroku

Ahora vamos a desplegar nuestra aplicación en Internet. Para hacerlo vamos a utilizar un servicio llamado [Heroku](https://heroku.com/), que nos va a permitir desplegar aplicaciones fácilmente a través de Git sin necesidad de preocuparnos por configurar el servidor, la base de datos, etc.

[Heroku](https://heroku.com/) es gratuito para aplicaciones con poco tráfico y sólo empiezas a pagar cuando necesitas un mayor rendimiento.

Si quieres clonar nuevamente el proyecto y ubicarte la rama de este capítulo ejecuta los siguientes comandos:

```
$ git clone https://github.com/makeitrealcamp/books-app.git
$ cd books-app
$ git checkout step-8
```

Ahora vas a borrar la carpeta `.git` con el siguiente comando:

```
$ rm -rf .git
```

Eso va a eliminar el repositorio local.

## Requisitos

El primer paso es asegurarte que tienes una cuenta en [Heroku](https://heroku.com/). Si aún no la tienes debes crear una antes de continuar.

Una vez tengas tu cuenta en [Heroku](https://heroku.com/), el siguiente paso es descargar el [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli). En [este enlace](https://devcenter.heroku.com/articles/heroku-cli) encontrarás las instrucciones para diferentes sistemas operativos.

[Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli) es una aplicación para la línea de comandos que nos va a permitir crear y administrar nuestras aplicaciones en [Heroku](https://heroku.com/).

Una vez tengas instalado [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli) vas a ejecutar el siguiente comando en la consola:

```
$ heroku login
```

Sigue las instrucciones e ingresa tus credenciales de [Heroku](https://heroku.com/).

## Configurando nuestro repositorio de Git

Debes crear el repositorio local de Git ejecutando los siguiente comandos:

```
$ git init
$ git add .
$ git commit -m 'Initial import'
```

## Configurando nuestra aplicación para Heroku

Para que nuestra aplicación funcione en [Heroku](https://heroku.com/) debemos realizar algunos cambios a nuestra aplicación.

Por defecto, en desarrollo, **Rails** utiliza una base de datos llamada SQLite, pero para [Heroku](https://heroku.com/) necesitamos configurar PostgreSQL.

El primer paso es agregar la gema de PostgreSQL al archivo `Gemfile`, pero para eso debemos primero mover la línea `gem 'sqlite3'` al grupo de development y test:

1. Corta la línea `gem sqlite3`
2. Pégala después de la línea `group :development, :test do`:

   ```ruby
    group :development, :test do
      gem 'sqlite3'
      ...
    `
   ```

Ahora agrega lo siguiente al final del archivo:

```ruby
group :production do
  gem 'pg'
end
```

Guarda y ejecuta `bundle install` en la consola.

El siguiente paso es configurar el archivo `config/database.yml`. Ábrelo y modifica la sección `production` para que quede de la siguiente forma:

```
production:
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  url: <%= ENV['DATABASE_URL'] %>
```

Eso es todo. Ahora vamos a hacer el commit ejecutando los siguientes comandos:

```
$ git add .
$ git commit -m 'Configure PostgreSQL for production'
```

## Creando y desplegando nuestra aplicación

Para crear una aplicación en [Heroku](https://heroku.com/) vas a ejecutar el siguiente comando en la consola:

```
$ heroku create
```

Para desplegar la aplicación vas a ejecutar los siguiente comandos:

```
$ git push heroku master
$ heroku run rails db:schema:load
```

Estos comandos toman algún tiempo en ejecutar. El primero es el más lento y el que despliega la aplicación. El segundo carga las tablas en la base de datos de Heroku.

Para abrir la aplicación en un navegador ejecuta:

```
$ heroku open
```

Regístrate y crea algunos libros para empezar.

## Redesplegando la aplicación

Cuando realices cambios sobre la aplicación y desees redesplegar a Heroku realiza los siguientes pasos:

1. Haz commit de tus cambios.

   ```
    $ git add .
    $ git commit -m "Mensaje de cambios"
   ```
2. Redespliega a Heroku

   ```
   $ git push heroku master
   ```
3. Si hiciste nuevas migraciones córrelas en Heroku:

   ```
   $ heroku run rails db:migrate
   $ heroku restart
   ```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://makeitrealcamp.gitbook.io/ruby-on-rails-5/11-heroku.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
