
|
In breve |
||
|
Catalogo |
Sistema |
|
|
Categoria |
Server di applicazioni |
|
|
Volumi dell'utente |
sì |
|
|
Num. minimo memoria |
160 MB |
|
|
OS |
Linux |
|
|
Vincoli |
no |
|
Il ROR è un'appliance di server Web basata sul framework Web di Ruby e Ruby-on-Rails. La documentazione principale per Ruby-on-Rails è disponibile su 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/o 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 |
|
Risorsa |
Minimo |
Massimo |
Predefinito |
|
CPU |
0.1 |
16 |
0.3 |
|
Memoria |
160 MB |
32 G |
512 MB |
|
Larghezza di banda |
1 Mbps |
2 Gbps |
250 Mbps |
Nota: è necessario configurare il valore della memoria in base al carico previsto su ROR e ai requisiti di memoria delle applicazioni distribuite.
|
Nome |
Direzione |
Protocol |
Description |
|
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. |
|
net |
out |
Qualsiasi |
Output di gateway per l'accesso di subnet. |
|
mon |
out |
CCE |
Invia le statistiche sull'utilizzo delle risorse e le prestazioni all'appliance di MON. |
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.
|
Volume |
Description |
|
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. |
|
Nome della proprietà |
Tipo |
Description |
|
hostname |
Stringa |
Nome host del sito Web. Impostazione predefinita: localhost |
|
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. In quella cartella deve essere creata una struttura tipica di directory principale per l'applicazione Rails (app/, config/, db/, doc/, lib/, log/, public/, script/ e così via). 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. Impostazione predefinita: (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. Interessa l'accesso, la selezione del database e altre opzioni di ambiente. I valori sono: produzione, sviluppo. Predefinito: produzione |
|
ror_port |
Numero intero |
Porta dove il server Web ROR ascolta le richieste HTTP in entrata. Impostazione predefinita: 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 dei fusi orari supportati è disponibile qui. Impostazione predefinita: (vuoto) |
Queste sono proprietà aggiuntive che non devono essere configurate in circostanze usuali. Possono essere utilizzate per sintonizzare ROR in un ambiente non standard.
|
Nome della proprietà |
Tipo |
Description |
|
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 l'opzione ror_rails high_performance è attivata, l'esecuzione di Phusion Passenger sarà più veloce, ma comporta una compatibilità ridotta con gli 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 dell'applicazione verrà chiusa e riavviata da Phusion Passenger. Un valore pari a 0 indica che non esiste un valore massimo: un'istanza dell'applicazione verrà chiusa una volta raggiunto il timeout di inattività. Questa opzione è utile se l'applicazione perde memoria. La chiusura dell'istanza dopo un certo numero di richieste garantisce la liberazione di tutta la memoria da parte del 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 |
Queste sono proprietà aggiuntive che generalmente non dovrebbero essere configurate. Possono essere utilizzate per sintonizzare ROR in circostanze non standard.
|
Nome della proprietà |
Tipo |
Description |
|
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. |
|
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 |
|
Nome della proprietà |
Tipo |
Description |
|
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. Impostazione predefinita: (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. Impostazione predefinita: (vuoto) |
Note:
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 di configurazione dell'adapter sqlserver di Rails (application/config/database.yml):
produzione: adattatore: sqlserver modalità: odbc dsn: Driver=FreeTDS;Server=db;Database=YOUR_DATABASE_NAME;Uid=USER_LOGIN;Pwd=USER_PASSWORD
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 |
Description |
|
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 inattive dell'applicazione saranno interrotte dopo un certo periodo, che può essere specificato con data_timeout_sec (salvo quando il valore è impostato su 0, caso in cui le istanze dell'applicazione non vengono mai interrotte a causa del timeout di inattività). Il valore di conteggio pari a inattivo - attivo.
In caso di errore nell'avvio dell'appliance, è possibile che vengano registrarti i seguenti errori nel log di sistema:
|
Messaggio di errore |
Description |
|
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) |
|
Messaggio |
Description |
|
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. |
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 |
Il seguente diagramma mostra un uso tipico dell'appliance di ROR. ROR serve le applicazioni dal volume di contenuto.

Appliance in uso:
|
Nome della 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.

Appliance in uso:
Esempio di configurazione della proprietà:
|
Nome della 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 |
sì |
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.

Appliance in uso:
Esempio di configurazione di proprietà per AppServer1 e AppServer2:
|
Nome della 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.
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 |
| Copyright © 2012 CA. Tutti i diritti riservati. |
|