Descripción general
El entorno de ejecución de Ruby es la pila de software encargada de instalar el código de tu aplicación y sus dependencias, y de ejecutar la aplicación. El entorno de ejecución se declara en app.yaml
como runtime: ruby
:
runtime: ruby
env: flex
Los entornos de ejecución en el entorno flexible se compilan con Docker. El entorno de ejecución de Ruby se basa en Ubuntu 16.04. El código fuente para el entorno de ejecución de Ruby está disponible de forma pública en GitHub.
Intérprete
Puedes especificar qué versión del intérprete de Ruby usar si lo proporcionas como contenido de un archivo .ruby-version
en el directorio de tu aplicación. Por ejemplo:
2.4.1
Cuando este archivo está presente, el entorno de ejecución instala la versión solicitada de Ruby durante la implementación de tu app mediante rbenv. Si no se puede instalar la versión solicitada, recibirás un mensaje de error durante la implementación.
Si no proporcionas un archivo .ruby-version
, el entorno de ejecución de Ruby se establecerá de forma predeterminada en una versión reciente de Ruby 2.6. Ten en cuenta que el valor predeterminado puede cambiar en cualquier momento, por lo que se recomienda que tu app especifique una versión de Ruby.
Dependencias
El entorno de ejecución busca un archivo Gemfile
en el directorio fuente de tu aplicación y usa Bundler
para instalar cualquier dependencia antes de iniciar la aplicación. Para obtener más información acerca de cómo declarar y administrar los paquetes, consulta Usa bibliotecas de Ruby.
Cómo usar bibliotecas de C con Ruby
Para las bibliotecas de Ruby que requieren extensiones de C, los encabezados de la versión de Ruby actual y los siguientes paquetes de Ubuntu se instalan previamente en el sistema.
- autoconf
- build-essential
- ca-certificates
- cmake
- curl
- archivo
- git
- imagemagick
- libcurl3
- libcurl3-gnutls
- libcurl4-openssl-dev
- libffi-dev
- libgdbm-dev
- libgit2-dev
- libgmp-dev
- libicu-dev
- libjemalloc-dev
- libjemalloc1
- libmagickwand-dev
- libmysqlclient-dev
- libncurses5-dev
- libpq-dev
- libqdbm-dev
- libreadline6-dev
- libsqlite3-dev
- libssl-dev
- libxml2-dev
- libxslt-dev
- libyaml-dev
- libz-dev
- systemtap
- tzdata
Estos paquetes permiten la instalación de las bibliotecas más populares de Ruby. Si la aplicación requiere otras dependencias del nivel del sistema operativo, deberás usar un entorno de ejecución personalizado basado en este entorno de ejecución para instalar los paquetes adecuados.
Inicio de la aplicación
El entorno de ejecución inicia la aplicación mediante el entrypoint
definido en app.yaml
. El punto de entrada debería iniciar un proceso que responda a solicitudes HTTP en el puerto definido por la variable de entorno PORT
.
Por ejemplo:
entrypoint: bundle exec rails server -p $PORT
La mayoría de las aplicaciones web usan un servidor web compatible con Rack, como Puma, Unicorn o Thin.
Debes agregar el servidor como una dependencia en el archivo de configuración Gemfile
de tu aplicación. El entorno de ejecución instalará todas las dependencias antes de que se llame al punto de entrada.
source "https://rubygems.org"
gem "rack"
gem "puma"
Este es un ejemplo de un punto de entrada que usa Puma para una aplicación Rails:
entrypoint: bundle exec rails server Puma -p $PORT
Este es un ejemplo de un entrypoint que usa puma para cualquier aplicación Rack:
entrypoint: bundle exec rackup -s Puma -p $PORT
Para las aplicaciones que pueden controlar solicitudes sin un servidor de Rack, solo puedes ejecutar una secuencia de comandos de Ruby:
entrypoint: bundle exec ruby app.rb
Extiende el tiempo de ejecución
El entorno de ejecución estándar de Ruby puede utilizarse para crear un entorno de ejecución personalizado. Los entornos de ejecución personalizados se configuran a través de Dockerfile
. Puedes generar un Dockerfile
según el entorno de ejecución estándar de Ruby mediante gen-config
:
gcloud beta app gen-config --custom
Luego, puedes personalizar el Dockerfile
y el .dockerignore
como desees. Por último, deberás especificar runtime: custom
en lugar de runtime: ruby
en app.yaml
.
Variables de entorno
Las siguientes variables del entorno se configuran mediante el entorno de ejecución:
Variable del entorno | Descripción |
---|---|
GAE_INSTANCE |
El nombre de la instancia actual. |
GAE_MEMORY_MB |
La cantidad de memoria disponible para el proceso de la aplicación. |
GAE_SERVICE |
El nombre del servicio especificado en el archivo app.yaml de la aplicación; si no se especifica ningún nombre, se configura como default . |
GAE_VERSION |
La etiqueta de versión de la aplicación actual. |
GOOGLE_CLOUD_PROJECT |
El ID del proyecto asociado con la aplicación, que se puede ver en Google Cloud Console. |
PORT |
El puerto que recibirá las solicitudes HTTP. |
RACK_ENV |
Se define en production . |
RAILS_ENV |
Se define en production . |
RAILS_SERVE_STATIC_FILES |
Se define en true . |
Puedes definir variables de entorno adicionales con app.yaml
.
Servidor de metadatos
Cada instancia de tu aplicación puede usar el servidor de metadatos de Compute Engine para consultar información sobre la instancia, incluidos el nombre del host, la dirección IP externa, el ID de instancia, los metadatos personalizados y la información de la cuenta de servicio. App Engine no permite definir metadatos personalizados para cada instancia, pero puedes definir los metadatos personalizados de todo el proyecto y leerlos desde tus instancias de App Engine y Compute Engine.
Esta función de ejemplo utiliza el servidor de metadatos para obtener la dirección IP externa de la instancia: