Argomento precedente: JBOSS, JBOSS64: server di applicazioni JBoss

Argomento successivo: Appliance del server di applicazioni

ROR: server di applicazioni Ruby-on-Rails

Server delle applicazioni Ruby-on-Rails

In breve

Catalogo

Sistema

Categoria

Server di applicazioni

Volumi dell'utente

Min. memoria

160 MB

Sistema operativo

Linux

Vincoli

no

Panoramica delle funzionalità

Il ROR è un'appliance di server Web basata sul framework Web di Ruby e Ruby-on-Rails. La documentazione principale di Ruby-on-Rails è disponibile presso: http://wiki.rubyonrails.org. Ruby-on-rails consente di scrivere codici belli che privilegiano la convenzione rispetto alla configurazione. Ruby-on-rails può funzionare come server Web standalone o come server di applicazioni.

ROR serve contenuto Web statico e distribuisce automaticamente le applicazioni Web da un volume di contenuto configurabile dall'utente. I percorsi ai documenti sono configurabili in modo che lo stesso volume venga condiviso fra più server Web e altre appliance che servono contenuto diverso.

ROR può operare in due modalità differenti: Apache/mod_passenger o Apache/mongrel_cluster. Entrambi i backend di Rails presentano anno vantaggi: ad esempio, Phusion Passenger fornisce ottime prestazioni per le applicazioni rails e la funzione di distribuzione mentre Mongrel garantisce una stabilità di produzione provata.

Come i server WEBx, ROR ha tre terminali di output generici che accedono ai servizi esterni dagli script sul volume di contenuto. Il terminale DB è utilizzato per accedere a diversi database; il terminale FS è utilizzato per accedere all'archiviazione dei file condivisi (mediante NFS); e il terminale AUX è creato per l'invio dei messaggi di posta elettronica a un server SMTP.

Il terminale di log dovrebbe essere utilizzato per connettere ROR a un file system condiviso dove ROR può archiviare i file di log.

La configurazione del server è definita usando varie proprietà. Queste proprietà sono state progettate per coprire la maggior parte delle varianti di utilizzo possibili, che sono comunque facili da configurare e solo in pochi casi richiedono di modificare le impostazioni di default.

Nome

Ultima versione

OS

Versione Ruby

Ruby-on-Rails Version (Versione release/prodotto)

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

Limite

Risorse

Risorsa

Minimo

Massimo

Predefinito

CPU

0,1

16

0,3

Memory (Memoria)

160 MB

32 G

512 MB

Larghezza di banda

1 Mbps

2 Gbps

250 Mbps

Nota: Il valore di memoria dovrebbe essere configurato in base alla quantità di applicazioni distribuite su ROR e ai requisiti di memoria delle applicazioni distribuite.

Terminali

Nome

Direzione

Protocollo

Descrizione

in

in

HTTP

Serve le richieste HTTP che vengono dai client Web. Supporta HTTP/1.1 e HTTP/1.0.

db

out

Qualsiasi

Accesso a un server del database. L'uso è definito indipendentemente dagli script che risiedono sul volume di contenuto (se del caso). Questo terminale può essere lasciato non connesso se non viene utilizzato.

fs

out

NFS

Accesso a un file system di rete per l'archiviazione dei file condivisi, consentendo un accesso ai file di scrittura/lettura su NFS. L'uso è definito indipendentemente dagli script che risiedono sul volume di contenuto (se del caso). Il software sul volume di contenuto "vede" il file system remoto come /mnt/fs nello spazio del file system dell'appliance. Questo terminale può essere lasciato non connesso se non viene utilizzato. Il server connesso deve avere una condivisione di lettura/scrittura denominata /mnt/data su NFS.

log

out

CIFS

Accesso a un file system di rete basato su CIFS per l'archiviazione dei log IIS. Questo terminale può essere lasciato non connesso se non viene utilizzato. Il server connesso deve consentire gli accessi anonimi e avere una condivisione di lettura/scrittura denominata shared.

aux

out

Qualsiasi

Accesso a un server SMTP per l'invio della posta elettronica in uscita.
Questo terminale può essere lasciato non connesso se non viene utilizzato.

net

out

Qualsiasi

Output di gateway per l'accesso di subnet.
Questo terminale può essere lasciato non connesso se non viene utilizzato.

mon

out

CCE

Invia le statistiche sull'utilizzo delle risorse e le prestazioni all'appliance di MON.
Questo terminale può essere lasciato non connesso se non viene utilizzato.

L'interfaccia predefinita è abilitata. È destinato per la diagnosi e la risoluzione dei problemi (su SSH). Le versioni future di questa appliance possono disabilitare l'accesso di SSH.

Volumi dell'utente

Volume

Descrizione

contenuto

Un volume di sola lettura o lettura/scrittura per l'archiviazione delle applicazioni Rails e dei dati di applicazioni. Questo volume è usato soltanto se la proprietà content_on_fs è impostata su off.

Proprietà

Nome di proprietà

Tipo

Descrizione

hostname

Stringa

Nome host del sito Web. Predefinito: host locale

admin_email

Stringa

Indirizzo di posta elettronica per l'amministratore di server. ROR usa questo nome per visualizzarlo nelle pagine generate automaticamente. Predefinito: root@localhost

app_base

Stringa

Directory principale per i documenti. Una struttura tipica di directory principale di applicazione Rails dovrebbe essere creata in quella cartella (app/, config/, db/, doc/, lib/, log/, public/, script/ ecc). Se app_base viene impostato sulla stringa vuota, viene utilizzata la directory principale del volume di contenuto. La directory deve essere già presente sul volume di contenuto. Predefinito: (vuoto)

content_on_fs

Stringa

Specifica se il contenuto è relativo al file system nel terminale FS oppure se è sul volume di contenuto. Predefinito: off (sul volume di contenuto)

ror_backend

Stringa

Attiva/disattiva l'uso di Apache/Mongrel_Cluster o di Apache/Passenger. Se ror_backend è impostato sul backend Mongel_Cluster servirà le applicazioni ROR invece di Phusion Passenger. Predefinito: passenger

ror_mode

Stringa

Modalità di operazione di ROR. Dopo la registrazione, la selezione di database e altre opzioni di ambiente. I valori sono: produzione, sviluppo. Predefinito: produzione

ror_port

Numero intero

Porta dove il server Web di ROR ascolta le richieste HTTP in entrata. Valore predefinito: 80

fuso orario

Stringa

Specifica il fuso orario usato nell'appliance. Se questa proprietà è vuota, il fuso orario non è modificato e viene lasciato com'è. Un elenco di fusi orari supportati è disponibile qui. Predefinito: (vuoto)

Proprietà di ROR avanzate

Queste sono proprietà aggiuntive che non devono essere configurate in circostanze usuali. Possono essere utilizzate per sintonizzare ROR in un ambiente non standard.

Nome di proprietà

Tipo

Descrizione

ror_instances_per_app

Numero intero

Il numero massimo di istanze di applicazioni che possono essere attive simultaneamente per una singola applicazione. Un valore di 0 significa che non vi è limite al numero di istanze che una singola applicazione può usare, ovvero verrà applicato soltanto il limite globale di ror_rails_max_pool_size (modalità Phusion Passenger soltanto; in modalità Mongrel 0 è uguale a 2). Valore predefinito: 0

ror_rails_use_global_queue

Stringa

Attiva/disattiva l'uso della coda globale su ON o OFF. Se la coda globale è su off, Phusion Passenger usa il bilanciamento di carico. Impostazione predefinita: OFF

ror_rails_high_performance

Stringa

Per impostazione predefinita, Phusion Passenger è compatibile con mod_rewrite e gli altri moduli di Apache. Tuttavia, sono richiesti molti sforzi per renderlo compatibile. Se si attiva ror_rails high_performance a su, Phusion Passenger viene eseguito più rapidamente ma avrà una compatibilità ridotta con altri moduli di Apache. Impostazione predefinita: OFF

ror_rails_max_pool_size

Numero intero

Il numero massimo di istanze di applicazioni Ruby on Rails o Rack che possono essere attive simultaneamente. Un numero superiore significa un uso più alto della memoria e una migliore capacità di gestire i client HTTP concorrenti. Efficace solo in modalità Passenger. Valore predefinito: 6

ror_rails_max_requests

Numero intero

Il numero massimo di richieste elaborate da un'istanza di applicazione. Dopo avere servito le richieste, l'istanza di applicazione verrà chiusa e Phusion Passenger è riavviato. Un valore di 0 significa che non vi è un massimo: un'istanza applicazione verrà chiusa quando è raggiunto il timeout di inattività. Questa opzione è utile se l'applicazione perde memoria. Chiudendola dopo un certo numero di richieste, tutta la memoria è liberata dal sistema operativo. Efficace solo in modalità Passenger. Valore predefinito: 0

ror_mongrel_start_port

Numero intero

Il numero di porta di avvio nell'intervallo di porta usato da mongrel_cluster. Valore predefinito: 3000

Proprietà di Apache avanzate

Queste sono proprietà aggiuntive che generalmente non dovrebbero essere configurate. Possono essere utilizzate per sintonizzare ROR in circostanze non standard.

Nome di proprietà

Tipo

Descrizione

max_connections

Numero intero

Numero massimo di connessioni concorrenti autorizzate. Quando questo numero viene raggiunto, le nuove connessioni sono comunque accettate ma la loro elaborazione è ritardata fino alla chiusura di un'altra connessione. Non è possibile impostare il valore di max_connections a oltre 256.
Valore predefinito: 128

persistent_connections

Stringa

Controlla se ROR consente ai client di chiedere più di un documento sulla stessa connessione. I valori consentiti sono ON e OFF. Può essere necessario disabilitare le connessioni persistenti soltanto se si hanno problemi con i client che non supportano HTTP/1.1 correttamente ma non rientrano in HTTP/1.0. Predefinito: on

idle_timeout_sec

Numero intero

Timeout, in secondi, per mantenere una connessione client aperta quando non vi è trasmissione di richieste o di risposte. Questa proprietà è usata solamente se persistent_connections è on. Se questo timeout è mantenuto basso, le connessioni dimenticate vengono fatte cadere rapidamente. Valore predefinito: 15

data_timeout_sec

Numero intero

Timeout, in secondi, per ricevere o inviare più dati quando un trasferimento di dati è avviato ma non concluso. Questo timeout consente a ROR di fare cadere le connessioni che sono state dimenticate pur permettendo i ritardi durante il trasferimento. Valore predefinito: 300

info_level

Stringa

Controlla quante informazioni ROR rivela ai client Web (nelle risposte di HTTP e nelle pagine generate automaticamente). I valori consentiti sono completi (soprattutto info), os, minor, major, prod (info minime). Come misura di protezione, si raccomanda di divulgare il minor numero di informazioni. Default prod

Registrazione delle proprietà

Nome di proprietà

Tipo

Descrizione

logs_enabled

Stringa

Abilita o disabilita completamente la registrazione. Impostazione predefinita: OFF

logs_base_dir

Stringa

Directory in cui sono archiviati i log di ROR. Questa proprietà non ha effetto se =logs_enabled è impostato su off. Predefinito: /

error_log_filename

Stringa

Nome di file per il log di errore, relativo al file system cui si accede dal terminale di log. Il nome può includere nomi di directory. Per esempio, consultare access_log_filename. Se questo viene impostato su un valore vuoto o se logs_enabled è 'off', il log di errori è scritto su un file sul file system principale dell'istanza ROR. Questa proprietà non ha effetto se client_cert è impostato su off. Predefinito: (vuoto)

error_log_level

Stringa

Livello di gravità di messaggi da scrivere al log di errore. I valori autorizzati sono debug, info, nota, avviso, errore, crit, allerta e emerg. Debug scrive la maggior parte dei messaggi, emerg scrive soltanto i messaggi di emergenza. Predefinito: avviso

access_log_filename

Stringa

Nome di file per il log di accesso, relativo al file system cui si accede dal terminale di log. Per esempio, access_log. Il nome può includere nomi di directory, per esempio, /srv1_logs/access_log o /logs/srv1_access_log. Se vuoto, il log di accesso non viene creato. Se le directory non esistono, verranno create. Questa proprietà non ha effetto se client_cert è impostato su off. Predefinito: (vuoto)

Note:

Qualcosa fosse necessario installare gemme extra, metterle nella cartella app_base/gems. Le gemme extra saranno installate nel disco ram e montate come /mnt/gemme. Inoltre, impostare la proprietà di ENV['GEM_HOME'] = '/mnt/gems' in config/enviroment.rb per fare in modo che l'applicazione Rails veda il repositorio. La dimensione del disco sarà calcolata automaticamente. Ricordarlo quando si assegna la memoria per l'appliance.

Database esterni

ROR supporta attualmente uno dei server MySQL, PostgreSQL, Microsoft SQL Server come archiviazione di dati esterna per le applicazioni di Rails. È sufficiente definire correttamente un adattatore e le credenziali utente di database nel file configurazione di applicazione Rails (database.yml).

Microsoft SQL Server è supportato usando il progetto di adattatore rails-sqlserver (http://rails-sqlserver.lighthouseapp.com/projects/20277-sql-server-05-adapter/tickets).

Esempio della configurazione di adattatore rails-sqlserver (application/config/database.yml):

produzione:
  adattatore: sqlserver
  modalità: odbc

dsn: Driver=FreeTDS;Server=db;Database=YOUR_DATABASE_NAME;Uid=USER_LOGIN;Pwd=USER_PASSWORD

Contatori personalizzati

L'appliance di ROR riporta i seguenti contatori personalizzati dal terminale di MON. Questi contatori appartengono al gruppo di contatori di ROR:

Nome di contatore

Descrizione

Hit totali

Numero totale di hit

Byte totali

Numero totale di byte

Richieste attive

Numero di richieste attive

Server inattivi

Numero di server inattivi

Memoria di Rails

Memoria totale utilizzata da Rails (solo modalità Passenger)

Applicazioni di Rails

Il numero di istanze di applicazioni correntemente attive (solo modalità Passenger)

Applicazioni attive

Il numero di istanze di applicazioni che elaborano correntemente richieste (solo modalità Passenger)

Applicazioni inattive

Il numero di istanze di applicazioni che non elaborano correntemente richieste ovvero che sono inattive * (solo modalità Passenger)

Sessioni di Rails

Mostra quanti client HTTP sono correntemente nella coda di tutte le istanze di applicazione, in attesa di essere elaborate (solo modalità Passenger)

Richieste di Rails

Indica quante richieste sono state servite da tutte le istanze fino a questo momento (solo modalità Passenger)

Nota: Le istanze di applicazione inattive verranno chiuse temporaneamente, come specificato da data_timeout_sec (tranne se il valore è impostato su 0, caso in cui le istanze di applicazioni non sono chiuse quando inattive). Il valore di conteggio pari a inattivo - attivo.

Possibili errori di avvio

In caso di errore nell'avvio dell'appliance, è possibile che vengano registrarti i seguenti errori nel log di sistema:

Messaggio di errore

Descrizione

ERRORE: i log sono abilitati, ma il terminale di log non è connesso.

il terminale di log non è connesso, ma logs_enabled o enable_access_log è impostato su yes.

ERRORE: la proprietà content_on_fs è su 'off' ma il volume di contenuto locale manca.

Il content_on_fs è impostato su off e specifica che il volume di dati deve essere montato localmente, ma ROR non riesce a montare il volume di contenuto. La causa probabile è che il volume di contenuto non è formattato oppure non è definito nelle proprietà di ROR.

Errore: impossibile montare la condivisione di nfs

ROR non riesce a montare la condivisione di nfs. La causa probabile è che fs non sia connesso o che ROR non è stato avviato prima di NAS (o un'altra appliance è connessa al terminale di fs)

Messaggi del dashboard

Messaggio

Descrizione

Lo spazio su disco disponibile per l'archiviazione dei dati è inferiore al 5%

Lo spazio su disco disponibile per il volume di dati cui si accede dal terminale FS è inferiore al 5%. Si consiglia di aumentare la dimensione del volume.

Lo spazio su disco disponibile per l'archiviazione dei dati è inferiore all'1%

Lo spazio su disco disponibile per il volume di dati cui si accede dal terminale FS è inferiore all'1%. È richiesta attenzione immediata perché potrebbe verificarsi una perdita di dati.

Lo spazio su disco disponibile per il volume del contenuto è inferiore al 5%

Lo spazio su disco disponibile per il volume del contenuto sull'appliance è inferiore al 5%. Si consiglia di aumentare la dimensione del volume.

Lo spazio su disco disponibile per il volume del contenuto è inferiore all'1%

Lo spazio su disco disponibile per il volume del contenuto sull'appliance è inferiore all'1%. È richiesta attenzione immediata perché potrebbe verificarsi una perdita di dati.

Prestazioni

Le prestazioni di ROR possono essere influenzate se la registrazione è attivata (logs_enabled = on. La tabella di seguito presenta i risultati di benchmark (specificati in unità di rps - richieste al secondo) quando i log sono disabilitati con l'utility di benchmark di Apache inclusa nel server Web Apache versione 2.0 e 2.2. Per maggiori informazioni, visitare il sito Web di Apache. Le seguenti impostazioni sono state utilizzate per il benchmarking: "bw=500M mem=2G cpu=2".

concomitanza

rps

concomitanza di 1 client

1700-2100 rps

concomitanza di 10 client

7100-7500 rps

concomitanza di 100 client

7700-8100 rps

Utilizzo tipico

Il seguente diagramma mostra un uso tipico dell'appliance di ROR. ROR serve le applicazioni dal volume di contenuto.

Uso di ROR esempio 2

Appliance in uso:

Nome di proprietà

Valore

Note

hostname

www.mysite.org

Nome host di sito.

app_base

MyApp

 

content_on_fs

off

ROR usa il contenuto del volume utente per tutto il contenuto.

fuso orario

EST

Fuso orario di EST.

ror_port

80

Porta standard per il protocollo HTTP.

Le richieste del client arrivano sul gateway di client. Il gateway inoltra le richieste al server ROR di AppServer, che serve la richiesta.

Applicazione a due livelli con database, log e monitoraggio

Il diagramma di seguito mostra un uso tipico dell'appliance di ROR con database, log, monitoraggio e contenuto su un'archiviazione di rete.

Uso di ROR esempio 2

Appliance in uso:

Esempio di configurazione delle proprietà:

Nome di proprietà

Valore

Note

hostname

www.mysite.org

Nome host di sito.

app_base

MyApp

 

content_on_fs

on

ROR usa l'archiviazione remota dal terminale di fs per tutto il contenuto

fuso orario

EST

Fuso orario di EST

ror_port

80

Porta standard per il protocollo HTTP.

max_connections

200

Max di 200 utenti concorrenti

logs_enabled

Abilita i log di errore

logs_base_dir

MyApp_Log_Dir

 

error_log_level

info

 

error_log_filename

error_log

Nome di log di errori

access_log_filename

access_log

Nome di log di accesso

Le richieste del client arrivano sul gateway di client. Il gateway inoltra le richieste al server AppServer, che serve la richiesta. Il contenuto e i log sono su appliance di archiviazione. I contatori sono riportati sull'appliance di MON.

Nota: Le applicazioni ROR possono usare molti tipi di database. ROR autorizza la connessione a qualsiasi appliance di database al suo terminale di db.

Sito Web abilitato a ROR scalabile

Il seguente diagramma mostra un uso tipico dell'appliance di ROR con il bilanciamento di carico.

Uso di ROR esempio 3

Appliance in uso:

Esempio di configurazione di proprietà per AppServer1 e AppServer2:

Nome di proprietà

Valore

Note

content_on_fs

off

ROR usa il contenuto del volume utente per tutto il contenuto.

fuso orario

EST

Fuso orario di EST

Altre impostazioni hanno i loro valori predefiniti.

Le richieste del client arrivano sul gateway di client. Il gateway inoltra le richieste all'utilità di bilanciamento del carico Web, che indirizza la richiesta a uno dei server AppServer1 e AppServer2.

Note
Questa appliance usa software Open Source e di terze parti

ROR usa i seguenti pacchetti Open Source e di terze parti oltre al suo sistema operativo di base di LUX5.

RPMs

Software

Versione

Modificato

License

apr

1.2.7-11

No

Apache Software License 2.0

apr-util

1.2.7-7.el5

No

Apache Software License 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

Apache Software License 2.0

keyutils-libs

1.2-1

No

LGPL

krb5-libs

1.6.1-31.el5_3.3

No

MIT, distribuibile 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 pubblico (senza copyright)

libselinux-python

1.33.4-5.1.el5

No

Dominio pubblico (senza copyright)

libstdc++

4.1.2-44.el5

No

GPLv2

mailcap

2.1.23-1.fc6

No

Dominio pubblico (senza 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

Ruby License/GPL - consultare COPYING

ruby-devel

1.8.6.383-4

No

Ruby License/GPL - consultare COPYING

ruby-irb

1.8.6.383-4

No

Ruby License/GPL - consultare COPYING

ruby-libs

1.8.6.383-4

No

Ruby License/GPL - consultare COPYING

ruby-rdoc

1.8.6.383-4

No

Ruby License/GPL - consultare COPYING

unixODBC

2.2.11-7.1

No

LGPL

Installato da origini

Software

Versione

Modificato

License

2000-2005-adapter

2.2.22

No

MIT

mysql-ruby

2.8.2

No

Ruby License

rubygems

1.3.6

No

Ruby License

GEMs

Software

Versione

Modificato

License

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

MIT/X Consortium License

cgi_multipart_eof_fix

2.5.0

No

Ruby License

daemons

1.0.10

No

Ruby License

dbd-odbc

0.2.5

No

BSD

dbi

0.4.3

No

BSD

deprecated

2.0.1

No

BSD

fastthread

1.0.7

No

Ruby License

ferret

0.11.6

No

MIT/X Consortium License

gem_plugin

0.2.3

No

Ruby License

highline

1.5.2

No

Ruby License/GPL

mongrel

1.1.5

No

Ruby License

mongrel_cluster

1.0.5

No

Ruby License

rake

0.8.4

No

Ruby License

net-scp

1.0.2

No

Ruby License/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

Ruby License

rails

2.3.4

No

Ruby License

rake

0.8.7

No

MIT/X Consortium License

sqlite3-ruby

1.2.5

No

BSD