Tema anterior: JBOSS, JBOSS64: servidor de aplicaciones JBoss

Tema siguiente: Dispositivos de servidor Web


ROR: servidor de aplicaciones Ruby-on-Rails

Servidor de aplicaciones Ruby-on-Rails

Vista rápida

Catálogo

Sistema

Categoría

Servidores de aplicaciones

Volúmenes de usuario

yes

Memoria mín.

160 MB

SO

Linux

Restricciones

no

Descripción general del funcionamiento

ROR es un dispositivo de servidor Web basado en el marco Ruby y Ruby-on-Rails. La documentación principal de Ruby-on-Rails se encuentra en http://wiki.rubyonrails.org. Ruby-on-rails le permite escribir código de calidad favoreciendo la convención frente a la configuración. Ruby-on-rails puede funcionar como servidor Web independiente o como servidor de aplicaciones.

ROR sirve contenido Web estático e implementa automáticamente aplicaciones Web desde un volumen de contenido configurable por el usuario. Las rutas a los documentos son configurables, de modo que el mismo volumen se pueda compartir entre varios servidores Web u otros dispositivos que sirvan contenido diferente.

ROR puede funcionar en dos modos diferentes: Apache/mod_passenger o Apache/mongrel_cluster. Ambos tipos de back-end Rails tienen sus propias ventajas. Phusion Passenger proporciona un rendimiento sumamente alto para aplicaciones Rails, así como una función de reimplementación en caliente, pero Mongrel tiene a su favor una estabilidad siempre constante.

Como los servidores WEBx, ROR tiene tres terminales de salida genéricos destinados a acceder a servicios externos desde scripts en el volumen de contenido. El terminal db se usa para acceder a diversas bases de datos; el terminal fs se usa para acceder a almacenamiento de archivos compartidos (mediante NFS); y el terminal aux se crea para enviar mensajes de correo electrónico a un servidor SMTP.

El terminal de registro se debe usar para conectar ROR a un sistema de archivos compartido donde ROR pueda almacenar archivos de registro.

La configuración del servidor se define mediante diversas propiedades. Estas propiedades se han diseñado para abarcar la mayoría de los usos de una forma fácil de configurar y, en la mayor parte de los casos, solamente hay que configurar unos pocos con valores no predeterminados.

Nombre

Última versión

SO

Versión Ruby

Versión Ruby-on-Rails

Phusion Passenger

Mongrel/Mongrel_Cluster

ROR

1.1.4-1

CentOS 5.5

Ruby 1.8.6

2.3.4

2.2.11

1.1.5/1.0.5

Recursos

Recurso

Mínimo

Máximo

Predeterminado

CPU

0.1

16

0.3

Memoria

160 MB

32 G

512 MB

Ancho de banda

1 Mbps

2 Gbps

250 Mbps

Nota: La cantidad de memoria se deberá configurar basándose en la carga esperada en ROR y los requisitos de memoria de las aplicaciones implementadas.

Terminales

Nombre

Dirección

Protocolo

Descripción

in

in

HTTP

Sirve solicitudes HTTP procedentes de clientes Web. Es compatible con HTTP/1.1 y HTTP/1.0.

db

Saliente

Cualquiera

Permite acceder a un servidor de base de datos. El uso se define mediante los scripts que residan en el volumen de contenido (si existe alguno). Este terminal se puede dejar desconectado si no se usa.

fs

Saliente

NFS

Acceso a un sistema de archivos de red para almacenamiento compartido de archivos que proporciona acceso de lectura/escritura al archivo a través de NFS. El uso se define mediante los scripts que residan en el volumen de contenido (si existe alguno). El software del volumen de contenido "ve" el sistema de archivos remoto montado como /mnt/fs en el espacio del sistema de archivos del dispositivo. Este terminal se puede dejar desconectado si no se usa. El servidor conectado debe tener un recurso compartido de lectura/escritura denominado /mnt/data exportado a través de NFS.

log

Saliente

CIFS

Acceso a un sistema de archivos de red basado en CIFS para almacenar registros de error y de acceso. Este terminal se puede dejar desconectado si no se usa. El servidor conectado debe permitir inicios de sesión anónimos y tener un recurso compartido de lectura/escritura exportado denominado share.

aux

Saliente

Cualquiera

Acceso a un servidor SMTP para el envío de correo electrónico saliente.
Este terminal se puede dejar desconectado si no se usa.

net

Saliente

Cualquiera

Salida de la puerta de enlace para acceso de subred.
Este terminal se puede dejar desconectado si no se usa.

mon

Saliente

CCE

Envía estadísticas de rendimiento y de uso de recursos al dispositivo MON.
Este terminal se puede dejar desconectado si no se usa.

La interfaz predeterminada está activada. Se utiliza para diagnósticos y solución de problemas (mediante SSH). Las versiones futuras de este dispositivo pueden desactivar el acceso de SSH.

Volúmenes de usuario

Volumen

Descripción

content

Un volumen de sólo lectura o lectura/escritura para almacenar las aplicaciones Rails y los datos de las aplicaciones. Este volumen sólo se utiliza si la propiedad content_on_fs se establece en "off".

Propiedades

Nombre de la propiedad

Tipo

Descripción

hostname

Cadena

Nombre de host del sitio Web. Valor predeterminado: localhost

admin_email

Cadena

Dirección de correo electrónico del administrador del servidor. ROR utiliza este nombre para mostrarlo en las páginas generadas automáticamente. Valor predeterminado: root@localhost

app_base

Cadena

Directorio raíz para los documentos. Se deberá crear una estructura típica de directorio raíz de aplicación de Rails en esa carpeta (app/, config/, db/, doc/, lib/, log/, public/, script/, etc). Si app_base se establece como una cadena vacía, se usa el directorio raíz del volumen de contenido. El directorio debe existir previamente en el volumen de contenido. Valor predeterminado: vacío

content_on_fs

Cadena

Especifica si el contenido se refiere al sistema de archivos del terminal fs o al volumen de contenido. Valor predeterminado: off (en el volumen de contenido)

ror_backend

Cadena

Cambia el uso del modo Apache/Mongrel_Cluster o Apache/Passenger. Si ror_backend se establece en mongrel, el back-end Mongel_Cluster servirá aplicaciones ROR en lugar de Phusion Passenger. Valor predeterminado: passenger

ror_mode

Cadena

Modo de operación de ROR. Afecta, entre otras, a las opciones de entorno de selección de la base de datos y registro. Los valores son: production, development. Valor predeterminado: production

ror_port

Entero

Puerto donde el servidor Web ROR está a la escucha de solicitudes HTTP entrantes. Valor predeterminado: 80

timezone

Cadena

Especifica la zona horaria utilizada en el dispositivo. Si esta propiedad está vacía, la zona horaria no se modifica y se deja tal cual. Aquí tiene disponible una lista de zonas horarias admitidas. Valor predeterminado: vacío

Propiedades ROR avanzadas

Estas son propiedades adicionales que no tienen que configurarse normalmente. Se pueden utilizar para ajustar ROR en un entorno no estándar.

Nombre de la propiedad

Tipo

Descripción

ror_instances_per_app

Entero

El número máximo de instancias de aplicación que pueden estar activas simultáneamente para una única aplicación. Un valor 0 significa que no existe límite en el número de instancias que puede utilizar una sola aplicación, es decir que solamente se aplicará el límite global de ror_rails_max_pool_size (sólo en modo "Phusion Passenger"; en modo "Mongrel" 0 es igual a 2). Valor predeterminado: 0

ror_rails_use_global_queue

Cadena

Activa o desactiva el uso de una cola global. Si se desactiva la cola global, Phusion Passenger utilizará un equilibrio de carga equitativo. Valor predeterminado: off

ror_rails_high_performance

Cadena

De forma predeterminada, Phusion Passenger es compatible con mod_rewrite y la mayor parte de los otros módulos Apache. Sin embargo, hacerlo compatible exige mucho trabajo. Si activa ror_rails high_performance, Phusion Passenger se ejecutará un poco más rápido pero con una reducción de la compatibilidad con otros módulos Apache. Valor predeterminado: off

ror_rails_max_pool_size

Entero

El número máximo de instancias de aplicaciones Ruby on Rails que pueden estar activas simultáneamente. Cuando más elevado sea el número, mayor uso se hará de la memoria, si bien también se mejorará la capacidad de gestionar clientes HTTP simultáneos. Sólo es efectivo en modo Passenger. Valor predeterminado: 6

ror_rails_max_requests

Entero

El número máximo de solicitudes que procesará una instancia de aplicación. Tras haber servido el número correspondiente de solicitudes, la instancia de aplicación se cerrará y Phusion Passenger la reiniciará. Un valor 0 significa que no hay máximo: las instancias de aplicación se cerrarán cuando se alcance su tiempo de espera de inactividad. Esta opción es útil si su aplicación está perdiendo memoria. Si se cierra después de un número determinado de solicitudes, se garantizará que el sistema operativo libere toda su memoria. Sólo es efectivo en modo Passenger. Valor predeterminado: 0

ror_mongrel_start_port

Entero

El número de puerto de inicio en el intervalo de puertos utilizado por mongrel_cluster. Valor predeterminado: 3000

Propiedades de Apache avanzadas

Estas son propiedades adicionales que normalmente no es necesario configurar. Se pueden utilizar para ajustar ROR en circunstancias no estándar.

Nombre de la propiedad

Tipo

Descripción

max_connections

Entero

Número máximo de conexiones simultáneas permitidas. Cuando se alcanza este número, se siguen aceptando nuevas conexiones, pero se retrasa su procesamiento hasta que se cierre otra conexión. El valor de max_connections no puede ser superior a 256.
Valor predeterminado: 128

persistent_connections

Cadena

Controla si ROR permite a los clientes pedir más de un documento en la misma conexión. Los valores permitidos son "on" y "off". Puede ser necesario desactivar las conexiones persistentes solamente si tiene problemas con clientes que admitan HTTP/1.1 pero no retrocedan a HTTP/1.0. Valor predeterminado: on

idle_timeout_sec

Entero

Tiempo de espera, en segundos, para mantener una conexión de cliente abierta si no hay ninguna solicitud o respuesta. Esta propiedad sólo se utiliza si persistent_connections está establecido en "on". Si se mantiene un tiempo de espera breve, las conexiones se "olvidarán" rápidamente. Valor predeterminado: 15

data_timeout_sec

Entero

Tiempo de espera, en segundos, para recibir o enviar más datos si se ha iniciado una transferencia de datos pero no se ha completado. Este tiempo de espera permite a ROR eliminar las conexiones olvidadas, si bien permitiendo que se produzcan retrasos durante la transferencia. Valor predeterminado: 300

info_level

Cadena

Controla cuánta información revela ROR sobre sí mismo a clientes Web (en respuestas HTTP y en páginas generadas automáticamente). Los valores permitidos son "full" (máxima información), "os", "minor", "major" y "prod" (mínima información). Como medida de seguridad, se recomienda revelar el mínimo de información. Valor predeterminado: prod

Registro de propiedades

Nombre de la propiedad

Tipo

Descripción

logs_enabled

Cadena

Activa o desactiva el registro por completo. Valor predeterminado: off

logs_base_dir

Cadena

Directorio en el que se almacenan los registros de ROR. Esta propiedad no tiene ningún efecto si =logs_enabled se establece en "off". Valor predeterminado: /

error_log_filename

Cadena

Nombre de archivo para el registro de errores, relativo al sistema de archivos accesible en el terminal de registro. El nombre puede incluir nombres de directorio. Para obtener ejemplos, consulte access_log_filename. Si esto se establece como un valor vacío, o si logs_enabled se ha establecido en "off", el registro de errores se escribe en un archivo en el sistema de archivos raíz de la instancia ROR en sí. Esta propiedad no tiene ningún efecto si logs_enabled se establece en "off". Valor predeterminado: vacío

error_log_level

Cadena

Nivel de severidad de los mensajes que se van a escribir en el registro de errores. Los valores permitidos son "debug", "info", "notice", "warn", "error", "crit", "alert" y "emerg". "debug" escribe la mayoría de los mensajes, "emerg" escribe solamente los mensajes de emergencia. Valor predeterminado: warn

access_log_filename

Cadena

Nombre de archivo para el registro de acceso, relativo al sistema de archivos accesible en el terminal de registro. Por ejemplo, access_log. El nombre puede incluir nombres de directorio como, por ejemplo, /srv1_logs/access_log o /logs/srv1_access_log. Si está vacío, no se crea el registro de acceso. Si los directorios no existen, se crearán. Esta propiedad no tiene ningún efecto si logs_enabled se establece en "off". Valor predeterminado: vacío

Notas:

Bases de datos externas

ROR es actualmente compatible con cualquier servidor MySQL, PostgreSQL o Microsoft SQL Server como almacenamiento de datos externo para aplicaciones rails. Basta con definir correctamente un adaptador y credenciales de usuario de base de datos en el archivo de configuración de la aplicación rails (database.yml).

Microsoft SQL Server es compatible utilizando el proyecto de adaptador rails-sqlserver (http://rails-sqlserver.lighthouseapp.com/projects/20277-sql-server-05-adapter/tickets).

Ejemplo de configuración de adaptador rails-sqlserver (application/config/database.yml):

production:
  adapter: sqlserver
  mode: odbc
  dsn: Driver=FreeTDS;Server=db;Database=NOMBRE_SU_BASE_DE_DATOS;Uid=INICIO_SESIÓN_USUARIO;Pwd=CONTRASEÑA_USUARIO
Contadores personalizados

El dispositivo ROR informa sobre los siguientes contadores personalizados a través del terminal "mon". Estos son los contadores que pertenecen al grupo de contadores de ROR:

Nombre del contador

Descripción

Total hits

Número total de coincidencias.

Total bytes

Número total de bytes.

Active requests

Número de solicitudes activas.

Idle servers

Número de servidores inactivos.

Rails memory

Memoria total utilizada por Rails (modo passenger solamente).

Rails applications

El número de instancias de aplicación que están actualmente activas (modo passenger solamente).

Active applications

El número de instancias de aplicación que están actualmente procesando solicitudes (modo passenger solamente).

Idle applications

El número de instancias de aplicación que actualmente no están procesando solicitudes, es decir, están inactivas * (modo passenger solamente).

Rails sessions

Muestra cuántos clientes HTTP están actualmente en la cola de todas las instancias de aplicación, esperando a ser procesadas (modo passenger solamente).

Rails requests

Indica cuántas solicitudes han servido todas las instancias hasta ahora (modo passenger solamente).

Nota: Las instancias de aplicación inactivas se cerrarán después de un rato, como especifique con data_timeout_sec (a menos que este valor se establezca en 0, en cuyo caso nunca se cierran instancias de aplicación por tiempo de inactividad). El valor de aplicaciones inactivas es igual al recuento de activas.

Posibles errores de inicio

En caso de error al iniciar el dispositivo, pueden aparecer los errores siguientes en el registro del sistema:

Mensaje de error

Descripción

ERROR: Logs are enabled, but log terminal is not connected.

El terminal de registro no está conectado, pero logs_enabled o enable_access_log está establecido en "yes".

ERROR: Property content_on_fs is 'off' but the local content volume is missing.

content_on_fs está establecido en "off", lo cual especifica que el volumen de datos se deberá montar localmente, pero ROR no puede montar el volumen de contenido. La causa más probable es que el volumen de contenido no se haya formateado, o no se haya definido en las propiedades de ROR.

ERROR: Failed to mount nfs share.

ROR no puede montar el recurso compartido NFS. La causa probable es que fs no esté conectado o que ROR se haya iniciado antes que NAS (o cualquier dispositivo que se conecte al terminal fs).

Mensajes del cuadro de mandos

Mensaje

Descripción

Data storage has less than 5% of free disk space

El volumen de datos al cual se accede a través del terminal fs tiene menos del 5 % de espacio libre en el disco. Se aconseja aumentar el tamaño del volumen.

Data storage has less than 1% of free disk space

El volumen de datos al cual se accede a través del terminal fs tiene menos del 1 % de espacio libre en disco. Se requiere atención inmediata; puede producirse una pérdida de datos.

Content volume has less than 5% of free disk space

El volumen de contenido en el dispositivo tiene menos del 5 % de espacio libre en el disco. Se aconseja aumentar el tamaño del volumen.

Content volume has less than 1% of free disk space

El volumen de contenido en el dispositivo tiene menos del 1 % de espacio libre en el disco. Se requiere atención inmediata; puede producirse una pérdida de datos.

Rendimiento

El rendimiento de ROR se puede ver afectado cuando se activa el registro (logs_enabled = on). La tabla siguiente contiene los resultados de un punto de referencia (benchmark). Dichos resultados están expresados en solicitudes por segundo (sps) y se han obtenido con los registros desactivados mediante la utilidad Apache Benchmark que se incluye con las versiones 2.0 y 2.2 del servidor Web de Apache. Encontrará más información para ab en el sitio Web de Apache. Se utilizaron los siguientes valores de configuración para el benchmarking: "bw=500M mem=2G cpu=2".

Simultaneidad

SPS

1 cliente simultáneamente

1700-2100 SPS

10 clientes simultáneamente

7100-7500 SPS

100 clientes simultáneamente

7.700-8.100 SPS

Uso típico

El diagrama siguiente muestra un uso típico del dispositivo ROR. ROR servirá aplicaciones desde el volumen de contenido.

Ejemplo de uso 2 de ROR

Dispositivos en uso:

Nombre de la propiedad

Valor

Notes

hostname

www.mysite.org

Nombre de host del sitio.

app_base

MyApp

 

content_on_fs

off

ROR utiliza el contenido del volumen de usuario para todo el contenido.

timezone

EST

Zona horaria del este.

ror_port

80

Puerto estándar para el protocolo HTTP.

Las solicitudes de cliente llegan a la puerta de enlace del cliente. La puerta de enlace reenvía las solicitudes al servidor AppServer ROR, el cual sirve la solicitud.

Aplicación de dos niveles con base de datos, registro y control

El diagrama siguiente muestra un uso típico del dispositivo ROR con base de datos, registro, control y contenido en un almacenamiento de red.

Ejemplo de uso 2 de ROR

Dispositivos en uso:

Ejemplo de configuración de las propiedades:

Nombre de la propiedad

Valor

Notes

hostname

www.mysite.org

Nombre de host del sitio.

app_base

MyApp

 

content_on_fs

on

ROR utiliza almacenamiento remoto a través del terminal fs para todo el contenido.

timezone

EST

Zona horaria del este.

ror_port

80

Puerto estándar para el protocolo HTTP.

max_connections

200

200 usuarios simultáneos como máximo.

logs_enabled

yes

Permite registros de errores.

logs_base_dir

MyApp_Log_Dir

 

error_log_level

info

 

error_log_filename

error_log

Nombre del registro de errores.

access_log_filename

access_log

Nombre del registro de acceso.

La solicitud del cliente llega a la puerta de enlace del cliente. La puerta de enlace reenvía las solicitudes al servidor AppServer, el cual sirve la solicitud. El contenido y los registros se encuentran en el dispositivo de almacenamiento. Los contadores se comunican al dispositivo MON.

Nota: Las aplicaciones ROR pueden utilizar muchos tipos de bases de datos. ROR permite conectar cualquier dispositivo de base de datos a su terminal db.

Sitio web con RoR activado escalable

El diagrama siguiente muestra un uso típico del dispositivo ROR con equilibrio de carga.

Ejemplo de uso 3 de ROR

Dispositivos en uso:

Configuración de propiedad de ejemplo tanto para AppServer1 como para AppServer2:

Nombre de la propiedad

Valor

Notes

content_on_fs

off

ROR utiliza el contenido del volumen de usuario para todo el contenido.

timezone

EST

Zona horaria del este.

Otros ajustes tienen sus valores predeterminados.

La solicitud del cliente llega a la puerta de enlace del cliente. La puerta de enlace envía las solicitudes al equilibrador de carga lb, el cual dirige la solicitud a uno de los servidores, AppServer1 y AppServer2.

Notes

Software de fuente abierta y de terceros utilizado dentro del dispositivo

ROR utiliza los siguientes paquetes de fuente abierta y de terceros además de la instalación base de LUX5.

RPM

Software

Versión

Modificado

Licencia

apr

1.2.7-11

No

Licencia de software Apache 2.0

apr-util

1.2.7-7.el5

No

Licencia de software Apache 2.0

e2fsprogs

1.39-20.el5

No

GPLv2

e2fsprogs-libs

1.39-20

No

GPLv2

freetds

0.64-11.el5.centos

No

GPLv2

glibc

2.5-34

No

LGPL

glibc-common

2.5-34

No

LGPL

httpd

2.2.3-22.el5.centos

No

Licencia de software Apache 2.0

keyutils-libs

1.2-1

No

LGPL

krb5-libs

1.6.1-31.el5_3.3

No

MIT, distribuible gratuitamente

libgcc

4.1.2-44.el5

No

GPLv2

libgomp

4.3.2-7.el5

No

GPLv2

libselinux

1.33.4-5.1.el5

No

Dominio público (sin copyright)

libselinux-python

1.33.4-5.1.el5

No

Dominio público (sin copyright)

libstdc++

4.1.2-44.el5

No

GPLv2

mailcap

2.1.23-1.fc6

No

Dominio público (sin copyright)

mysql

5.0.45-7.el5

No

GPLv2

nfs-utils

1.0.9-40

No

GPLv2

openldap

2.3.43-3.el5

No

OpenLDAP

openssl

0.9.8e-7.el5

No

BSD-like

perl-DBI

1.52-2.el5

No

GPL

pkgconfig

0.21-2.el5

No

GPLv2

postgresql

8.1.11-1.el5_1.1

No

BSD

postgresql-libs

8.1.11-1.el5_1.1

No

BSD

ruby

1.8.6.383-4

No

Licencia de Ruby/GPL: consulte COPIA

ruby-devel

1.8.6.383-4

No

Licencia de Ruby/GPL: consulte COPIA

ruby-irb

1.8.6.383-4

No

Licencia de Ruby/GPL: consulte COPIA

ruby-libs

1.8.6.383-4

No

Licencia de Ruby/GPL: consulte COPIA

ruby-rdoc

1.8.6.383-4

No

Licencia de Ruby/GPL: consulte COPIA

unixODBC

2.2.11-7.1

No

LGPL

Instalado desde las fuentes

Software

Versión

Modificado

Licencia

2000-2005-adapter

2.2.22

No

MIT

mysql-ruby

2.8.2

No

Licencia de Ruby

rubygems

1.3.6

No

Licencia de Ruby

GEMs

Software

Versión

Modificado

Licencia

actionmailer

2.3.4

No

MIT

actionpack

2.3.4

No

MIT

activerecord

2.3.4

No

MIT

activeresource

2.3.4

No

MIT

activesupport

2.3.4

No

MIT

capistrano

2.5.9

No

Licencia de MIT/X Consortium

cgi_multipart_eof_fix

2.5.0

No

Licencia de Ruby

daemon

1.0.10

No

Licencia de Ruby

dbd-odbc

0.2.5

No

BSD

dbi

0.4.3

No

BSD

deprecated

2.0.1

No

BSD

fastthread

1.0.7

No

Licencia de Ruby

ferret

0.11.6

No

Licencia de MIT/X Consortium

gem_plugin

0.2.3

No

Licencia de Ruby

highline

1.5.2

No

Licencia de Ruby/GPL

mongrel

1.1.5

No

Licencia de Ruby

mongrel_cluster

1.0.5

No

Licencia de Ruby

rake

0.8.4

No

Licencia de Ruby

net-scp

1.0.2

No

Licencia de Ruby/GPL

net-sftp

2.0.3

No

BSD/Ruby License

net-ssh

2.0.15

No

BSD/Ruby License

net-ssh-gateway

1.0.1

No

BSD/Ruby License

net-ssh-multi

1.0.1

No

BSD/Ruby License

passenger

2.2.11

No

GPLv2

pg

0.8.0

No

Licencia de Ruby

rails

2.3.4

No

Licencia de Ruby

rake

0.8.7

No

Licencia de MIT/X Consortium

sqlite3-ruby

1.2.5

No

BSD