> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vertracloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo alojar una aplicación Ruby en Vertra Cloud

> Despliega una aplicación Ruby en Vertra Cloud: Gemfile y Gemfile.lock, bundler en la plataforma, archivo de entrada y escucha en 0.0.0.0.

## Requisitos

* Ruby 3.3+ instalado localmente
* Bundler para la gestión de dependencias
* Cuenta en [Vertra Cloud](https://vertracloud.app)

## Estructura del proyecto

```
my-app-ruby/
├── app.rb
├── Gemfile
├── Gemfile.lock
└── vertracloud.config
```

## Configuración

### Gemfile

```ruby theme={null}
source 'https://rubygems.org'

ruby '3.3.0'

gem 'sinatra', '~> 3.0'
gem 'rack', '~> 2.2'
gem 'pry', '~> 0.14'
gem 'pg', '~> 1.5'  # Para PostgreSQL
gem 'json', '~> 2.6'

group :development do
  gem 'rerun', '~> 1.14'
end
```

> [!NOTE]
>
> La plataforma ejecuta `bundle install` automáticamente. No incluyas la carpeta `vendor` en la subida.

### vertracloud.config

```ini theme={null}
MAIN=app.rb
START=bundle exec ruby app.rb -p $PORT -o 0.0.0.0
VERSION=recommended
```

## Ejemplo: aplicación Sinatra

### app.rb

```ruby theme={null}
require 'sinatra'
require 'json'
require 'pg'

set :bind, '0.0.0.0'
set :port, ENV['PORT'] || 80

# Configuración de la base de datos
def get_db_connection
  begin
    PG.connect(
      host: ENV['DB_HOST'] || 'localhost',
      dbname: ENV['DB_NAME'] || 'vertracloud',
      user: ENV['DB_USER'] || 'vertracloud',
      password: ENV['DB_PASSWORD'] || '',
      port: ENV['DB_PORT'] || 5432
    )
  rescue PG::Error => e
    puts "Database connection error: #{e.message}"
    nil
  end
end

before do
  content_type :json
end

# Ruta raíz
get '/' do
  {
    message: 'Ruby Sinatra API on Vertra Cloud',
    version: '1.0.0'
  }.to_json
end

# Comprobación de estado
get '/health' do
  {
    status: 'healthy',
    service: 'ruby-api',
    uptime: Time.now.to_i
  }.to_json
end

# Listar elementos
get '/api/items' do
  conn = get_db_connection
  return { error: 'Database connection failed' }.to_json if conn.nil?

  begin
    result = conn.exec('SELECT id, name, description FROM items LIMIT 20')
    items = result.map do |row|
      {
        id: row['id'].to_i,
        name: row['name'],
        description: row['description']
      }
    end
    items.to_json
  rescue PG::Error => e
    { error: e.message }.to_json
  ensure
    conn.close if conn
  end
end

# Gestión de errores
error do
  status 500
  { error: 'Internal server error' }.to_json
end

not_found do
  status 404
  { error: 'Not found' }.to_json
end

puts "Server starting on #{settings.bind}:#{settings.port}"
```

## Despliegue

**Panel**

1. Comprime el proyecto en un `.zip` (carpetas como `node_modules`, `venv` y `target` se eliminan automáticamente) o súbelo a GitHub.
2. En el panel, haz clic en **Nuevo proyecto** y sube el `.zip` o pega la URL del repositorio.
3. En **Build**, revisa el runtime (**Ruby**), el archivo principal (`app.rb`) y la memoria. Los comandos de inicio y de build están en **Ajustes avanzados**.
4. Agrega tus variables de entorno en **Entorno**.
5. En **Red**, activa **Publicación web** para que la aplicación obtenga una dirección `*.vertraweb.app` (plan Pro o superior, 512 MB de memoria). La aplicación debe escuchar en el puerto 80.
6. Revisa y despliega. Sigue la salida en la pestaña **Logs**.

**CLI**

```bash theme={null}
vertra upload
vertra logs -f
```

Consulta [CLI](https://docs.vertracloud.app/es-es/cli.md) para la instalación y el inicio de sesión.

**VS Code**

Abre la carpeta con la extensión de Vertra Cloud instalada y ejecuta **Desplegar el proyecto actual**. Consulta [Extensión de VS Code](https://docs.vertracloud.app/es-es/vscode-extension.md).

La guía completa está en [Primer despliegue](https://docs.vertracloud.app/es-es/how-to-host.md).

## Versiones disponibles

| Versión | Estado | Descripción |
| - | - | - |
| 3.4.11 | Última | Ruby 3.4 (última versión) |
| 3.3.12 | Recomendada | Ruby 3.3 (recomendada para producción) |

## Notas

* **Dependencias**: usa Bundler para gestionar las gemas
* **Variables de entorno**: accede a ellas con `ENV['KEY']`
* **Base de datos**: configura las credenciales como variables de entorno
* **Logs**: usa `puts` o `STDOUT.puts` para los logs que aparecen en el panel
* **GIL**: Ruby usa el Global Interpreter Lock; considera varios procesos para trabajo intensivo de E/S
* Escucha en `0.0.0.0` en el puerto `$PORT`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.