2 Jan
matte

matte il 2 January 2009 parla di Configurazioni, Risorse, Tutorial

Deploy Rails su (gs) Grid-Service di Media Temple

Abbiamo deciso di testare il Grid-Service di Media Temple equipaggiato con il Ruby on Rails GridContainer.

La prima particolarità che abbiamo notato è la necessità di acquistare separatamente i due servizi. Prima il Grid-Service e successivamente il GridContainer. E’ possibile effettuare lo scaling del contenitore (offerto in 3 tagli in base alla memoria di cui avete bisogno) in qualsiasi momento, sia verso un container più potente sia verso uno più economico.

Una volta attivato l’account riceverete una mail con le istruzioni per gestire:

  • FTP e SSH login
  • Email
  • MySQL

Per abilitare l’accesso SSH dovete entrare nel pannello di gestione del dominio associato all’account e all’interno dell’opzione “Server Administrator” impostare ad “Enabled” l’opzione SSH.

In questo modo potete accedere al vostro server con SSH.

Effettuare il deploy di un’applicazione Rails non è immediato. Vediamo di analizzare in dettaglio i passi necessari (tratto in parte dalla guida Media Temple):

Un comando indispensabile all’interno del container è mtr. Questo comando consente di interfacciarsi con il container e permette di:

  • Aggiungere e rimuovere applicazioni
  • Far partire, rimuovere e riavviare applicazioni
  • Visualizzare e interrogare lo stato delle applicazioni
  • Generare il file di configurazione .htaccess per dare l’accesso al GridService di effettuare il proxy della nostra applicazione.

Impostare il repositorio di Media Temple per le gemme già compilate con il seguente comando:

gem list --remote --source=http://gems.mediatemple.net/

Impostate un repositorio privato per le RubyGems:

mtr -u serveradmin@mt-example.com -p <password> setup_rubygems

Aggiornare la shell con il comando:

source ~/.bash_profile

Aggiungere il repositorio di Media Temple a quello locale:

gem sources --add http://gems.mediatemple.net

A questo punto installate con i soliti comandi le gemme che preferite stando attenti a RMagick. Purtroppo via SSH non funziona il caricamento della libreria quindi otterrete un errore non quando avvierete la vostra applicazione nel GridContainer, ma lanciando il server o la console da locale. L’errore ottenuto nel nostro caso è il seguente:

    1 RuntimeError: This version of RMagick was created to run with ImageMagick 6.0.7
    2 but ImageMagick 6.0.6 is installed on this system. You should either
    3    1) Configure and build RMagick for ImageMagick 6.0.6, or
    4    2) download ImageMagick 6.0.7 from http://www.imagemagick.org and install it.
    5 
    6     from /home/57577/data/rubygems/gems/gems/rmagick-1.15.15-x86-linux/lib/RMagick.so
    7     from /home/57577/data/rubygems/lib/rubygems/custom_require.rb:31:in `require'
    8     from /home/57577/data/rubygems/gems/gems/rmagick-1.15.15-x86-linux/lib/RMagick.rb:11
    9     from /home/57577/data/rubygems/lib/rubygems/custom_require.rb:36:in `gem_original_require'
   10     from /home/57577/data/rubygems/lib/rubygems/custom_require.rb:36:in `require'
   11     from (irb):6

Per ovviare a questo problema basta evitare di caricare la gemma via SSH effettuando il require all’interno dell’applicazione con le seguenti linee di codice:

    1 begin
    2   require 'RMagick'
    3 rescue NameError, LoadError, RuntimeError
    4   # RMagick didn't load right
    5 end

Per effettuare il deploy sarà necessario installare mt-capistrano una gemma sviluppata appositamente per il deploy sui server Media Temple.

Un file di deploy utilizzabile è:

    1 require 'mt-capistrano'
    2  
    3 set :site,         "00000"
    4 set :application,  "your_app"
    5 set :webpath,      "domain.com"
    6 set :domain,       "s00000.gridserver.com"
    7 set :user,         "serveradmin@domain.com"
    8 set :password,     "your_password"
    9 set :use_sudo, false
   10  
   11 ssh_options[:username] = 'serveradmin@domain.com'
   12  
   13 set :repository, "svn://domain.com/#{application}/trunk"
   14 set :deploy_to,  "/home/#{site}/containers/rails/#{application}"
   15  
   16 set :checkout, "export"
   17  
   18 role :web, "#{domain}"
   19 role :app, "#{domain}"
   20 role :db,  "#{domain}", :primary => true
   21  
   22 task :after_update_code, :roles => :app do
   23   put(File.read('config/database.yml'), "#{release_path}/config/database.yml", :mode => 0444)
   24 end
   25  
   26 task :restart, :roles => :app do
   27   run "mtr restart #{application} -u #{user} -p #{password}"
   28   run "mtr generate_htaccess #{application} -u #{user} -p #{password}"
   29   migrate
   30 end

Dove le variabili site, application, webpath, domain, user, password sono quelle specifiche del vostro account.

Una volta lanciato il setup ed il deploy con i comandi:

cap deploy:setup
cap deploy

Avrete caricato la vostra applicazione sul server di Media Temple. A questo punto la dovrete configurare e collegare al RoR GridContainer:

mtr -u serveradmin@domain.com -p <password> add your_app $PWD domain.com 

mtr -u serveradmin@domain.com -p <password> start your_app

Visto che effettuiamo il deploy con il capistrano, la nostra applicazione avrà una struttura più complessa di una semplice directory e dovremo variare il percorso impostandolo alla directory current:

mtr -u serveradmin@domain.com -p <password> set_option your_app syspath=/home/00000/containers/rails/your_app/current

Per verificare se la vostra applicazione è stata lanciata correttamente eseguite:

mtr -u serveradmin@domain.com -p <password> status

Per collegarla ad Apache lanciate i seguenti due comandi:

mtr -u serveradmin@domain.com -p <password> generate_htaccess your_app
mtr -u serveradmin@domain.com -p <password> create_link your_app

Se sul vostro server sono installate tutte le gemme di cui l’applicazione ha bisogno dovreste poter accedere al vostro sito andando con il vostro browser all’indirizzo http://domain.com

All’interno del vostro pannello di controllo avrete la possibilità di stoppare l’applicazione e di riavviarla utilizzando il browser.

8 Commenti a “Deploy Rails su (gs) Grid-Service di Media Temple”

  1. Luca il 14 January 2009 alle 12:26 dice:

    Avendo valutato di recente servizi simili, posso chiedere qual’è stata la molla che vi ha spinto a testare l’accoppiata gs e container Rails?

  2. matte il 16 January 2009 alle 14:25 dice:

    Ciao Luca,
    abbiamo letto e studiato le caratteristiche del grid server e del container Rails. Il prezzo non ci sembrava niente male per quello che veniva offerto, quindi abbiamo deciso di fare una prova. Siamo curiosi di vedere come può reagire a picchi di richieste. Inoltre nel caso in cui serva c’è anche la possibilità di acquistare un container interamente dedicato a MySQL. Per ora a parte qualche sporadico Proxy Server error sembra andare abbastanza bene…

    Logicamente sei un po’ limitato a livello di customizzazione del server… Ad esempio non hai il comando top e puoi vedere solamente l’occupazione di memoria del container rails utilizzando il loro comando mtr…

  3. Luca il 17 January 2009 alle 14:42 dice:

    Grazie mille per la risposta e buon divertimento ;)

  4. Federico il 28 January 2009 alle 11:00 dice:

    Ciao, grazie per l’informazione. Ho un gs su mediatemple ma non ho mai utilizzato il container rails. Seguirò le vostre info.

    Ho scoperto un nuovo servizio della Latvia: http://manshostings.lv/en

    costo per due anni: € 136,55

  5. matte il 28 January 2009 alle 11:08 dice:

    Ciao Federico,
    purtroppo l’accoppiata non è stata vincente… Abbiamo avuto un sacco di errori (Proxy Server Error). Errore comune a quasi tutti gli sviluppatori Rails su MT. Ne sono a conoscenza ma non riescono a capire da cosa dipenda. Praticamente Apache a volte non riesce a trovare il container Rails nonostante tutto dell’applicazione fosse page cached… Quindi stiamo provando Linode. :-) per adesso sembra molto valido, anche se è un vps e non più un hosting condiviso come quello su MT.

    Grazie per la segnalazione dell’hosting lettone. Non sembra niente male come offerta.

  6. yortz il 25 February 2009 alle 22:48 dice:

    Ciao ragazzi, davvero complimenti per il vostro blog, stavo leggendo per caso il post su MT e non potevo non fornire il mio modestissimo parere a riguardo: io a differenza di quanto ilustrate, arrivo da un’esperienza pessima con mt. Il gs è secondo me solo aria fritta perchè in realtà è blindato e offre minime possibilità di configurazione; a tale proposito ho dovuto strippare non poco con il loro supporto tecnico inesistente per cercare almeno di farmi installare qualche gem, ma la loro risposta e stata higly unprofessional e in ritardo sulle scadenze del cliente (ho ancora tutto salvato nell’account manager lo storico delle richieste che il loro technical support evadeva come risolte dopo un’assenza di comunicazione protrattasi anche più di una settimana). Sinceramente mi ha procurato solo un sacco di mal di pancia e di scocciature facilmente evitabili. Personalmente ho avuto esperienze con altri shared hosting, tipo site 5 e railsplayground che danno la biada al “fumo” che gira intorno a mt e al loro costosissimo e troppo sopravvalutato gs, mi trovo molto bene per il shared hosting con hostingrails. Per me quella con MT e solo un’esperienza da dimenticare. Con questo non voglio assolutamente fare promozione per un servizio di hosting piuttosto che per un altro; ho voluto solo dare il mio modestissimo contributo e spero che possa essere d’aiuto a chi sia ancora in fase di valutazione prima di sottoscrivere con MT. Mi rincresce, ma dopo questa esperienza e dopo un rapporto di amore con rails che si protare ormai da diversi anni ho maturato la presonalissima idea che la soluzione migliore (equiparabile se non superiore ai non pochi 20$ di MT), sia sempre quella di potere utilizzare una VPS per un certo di tipo di sviluppo con Rails o Merb, insomma con Ruby:) Certo siete molto più per i caXXi vostri, però bisogna pure sempre iniziare da qualche parte no? Infatti adesso continuo col deploy con sprinkle sul mio nuovo shiny slice del backup dell’ex defunta app che girava sull’insulsa MT:)

  7. Andrea il 12 May 2009 alle 23:34 dice:

    Uso linode già da 5 mesi e devo dire che hanno un servizio, un supporto e un rapporto qualitàprezzo fantastico :) Ora hanno anche attivato il servizio di backup (in beta) e hanno aumentato gli hd del 33%. Non potrei essere piu soddisfatto. Di servizi come Grid Service solitamente non mi fido, mi sembrano più per gente alle prime armi che non sa dove mettere le mani, sempre meglio gestirsi i propri server da se, completamente.
    Bel lavoro con il blog, speriamo Rails e Ruby prendano sempre più piede anche in italia.

    Ciao

  8. yortz il 12 August 2009 alle 14:13 dice:

    Piccolo aggiornamento, visto che sembra che sia uno dei pochi a lavorare pure ad agosto, continua la frustrazione con la ciofeca di MT: specifico per chi lo usa che arrivo da un clean container con un mtr setup_rubygems che preso da qui:

    http://kb.mediatemple.net/questions/876/Upgrading+your+RubyGems+repository

    da come si legge: “You do not have to install any of the pre-compiled gems listed below. The default RubyGems repository installed with the above command installs the following gems automatically”:

    • Ruby on Rails (v2.2.2)
    • fastthread (v1.0.1)
    • mongrel (v1.1.5)
    • mysql (v2.7)
    • postgres (v0.7.9.2008.01.28)
    • rmagick (v1.15.14)
    • cgimultiparteof_fix (v2.5.0)
    • daemons (v1.0.10)
    • gem_plugin (v0.2.3)
    • rake (v0.8.3)

    al che lancio irb (ancora non capisco perche cacchio non consentano di installare una versione funzionante di image_science dalla loro repo, viste le issues con il memory usage per rmagick…..forse semplicemente perche non esiste nessuno da loro che sappia configurare freeimage su quel buggy gs….)

    irb(main):001:0> require ‘rubygems’
    => true
    irb(main):002:0> require ‘RMagick’
    RuntimeError: This version of RMagick was created to run with ImageMagick 6.0.7
    but ImageMagick 6.0.6 is installed on this system. You should either
    1) Configure and build RMagick for ImageMagick 6.0.6, or
    2) download ImageMagick 6.0.7 from http://www.imagemagick.org and install it.

    from /home/12345/data/rubygems/gems/gems/rmagick-1.15.15-x86-linux/lib/RMagick.so
    from /home/12345/data/rubygems/lib/rubygems/custom_require.rb:31:in `require'
    from /home/12345/data/rubygems/gems/gems/rmagick-1.15.15-x86-linux/lib/RMagick.rb:11
    from /home/12345/data/rubygems/lib/rubygems/custom_require.rb:36:in `gem_original_require'
    from /home/12345/data/rubygems/lib/rubygems/custom_require.rb:36:in `require'
    from (irb):2
    

    ….. non ho parole! meno male che ho spostato tutto da li! E sapete la loro risposta? Dopo 2 giorni e mio sollecito?

    We have reviewed your request and determined that it requires the assistance of a higher level staff member or system administrator. Please anticipate a short delay while we re-assign your support request to a staff member who is better equipped to service your needs.

    Due to the nature of this support request additional time may be needed to provide you with a response. Thank you.

    Cioe hanno pure bisogno di inoltrare la request a qualcuno che mi configuri come si deve rmagick sul gs? ALLUCINANTE! NON HO DAVVERO PAROLE!

    Senza menzionare il fatto che di botto, senza alcuna notifica ne niente, il container e andato giu per 2 giorni (e se non c’erano i clienti che mi rompevano io manco me ne accorgevo) e le due test app (mephisto 0.8.2) che avevo ospitato sul gs sempre di botto e senza notifica alcuna si sono “stoppate”, cosi perche ne avevano voglia… cavoli e poi dicono di noi Italiani… io prenderei un’aereo apposta fino in California per mettere le mani al collo (vorrei proprio conoscerlo) al loro sysadmin!:)

Scrivi un commento