Archive

Posts Tagged ‘ruby on rails’

delayed jobs

Vi sono alcuni casi in cui effettuare alcune operazioni direttamente da Rails prima della risposta di un controller richiederebbe troppo tempo. Si pensi ad esempio un processo che deve scaricare/caricare una risorsa esterna che potrebbe impiegare un tempo indefinito (ad esempio un feed RSS o un’immagine o l’invio di un’email), o effettuare un’elaborazione complessa, in questi casi l’utilizzo di una coda di processi permette di dare una risposta immediata all’utente e completare il task in background. Se necessario avvertire l’utente quando l’elaborazione è terminata è possibile utilizzare un polling ajax o comet (ad esempio APE) oppure quando disponibili sul client le websocket HTML5.

Vi sono diverse implementazioni di queue manager, da ActiveMQ a RabbitMQ (che è stato usato per forexdesk.com) alle innumerevoli versioni Java. La versione piu semplice che si possa adottare su rails, e sufficiente nella quasi totalità dei casi, è delayed jobs, da notare che questa soluzione è anche quella adottata da Heroku sui suoi workers.

JSON e JSONP con ruby on rails

JSON e JSONP sono molto spesso utilizzati da rails per dialogare con terze parti, ad esempio per rispondere a chiamate ajax. In rails vi sono diversi metodi per utilizzare JSON.
L’approccio old-school compatibile con rails 2.3 è quello di utilizzare il metodo respond_to e passare un blocco nel quale specificare i vari formati:

Con rails3 è possibile utilizzare il metodo respond_with:

Di default in rails include_root_in_json è true, in alcuni casi è necessario settarlo a false:

Per utilizzare JSONP è sufficiente specificare il metodo di callback nella render:

testare le routes con rspec2

Chi si è già aggiornato a rspec2 avrà notato che il vecchio approccio al testing delle routes è deprecato, il vecchio codice non funziona più:

it "should map { :controller => 'comments', :action => 'index' } to /comments" do
  route_for(:controller => "comments", :action => "index").should == "/comments"
end
it "should generate params { :controller => 'comments', action => 'index' } from GET /comments" do
  params_from(:get, "/comments").should == {:controller => "comments", :action => "index"}
end

C’è stato ultimamente un’interessante dibattito su quale sia la migliore via per procedere a questo tipo di test, nell’attesa che nuovo zucchero venga aggiunto (es: l’uso del nuovo formato di indirizzamento delle routes tipo “controller#action“) il nuovo approccio (che fa un check bidirezionale) è il seguente:

it "routes GET /post/:post_id/comments to comments#index for post_id" do
  {:get => "/post/1/comments"}.should route_to(:controller => "comments", :action => "index", :post_id => "1")
end

che però senza questo commit non funziona. Per procedere quindi è necessario al momento aggiornarsi all’ultima release di rspec-rails, modificando il file Gemfile:

group :test do
   gem 'rspec-rails',  :git=> "git://github.com/rspec/rspec-rails.git"
end

Patterns in Ruby: Observer

Capita spesso che al variare di un determinato valore tanti elementi distinti debbano aggiornarsi, ad esempio un grafico che si aggiorna al variare dei valori di una tabella, o le celle di un foglio di calcolo. In tutti questi casi torna utile l’Observer pattern. Nell’esempio che segue variando i valori delle valute verrà automaticamente aggiornato il grafico, ovviamente il numero degli observer non è limitato ad uno.

Read more…

shortcuts per rails compatibili con rails3

Questo è uno script bash che permette di lanciare rails server/console/generate rispettivamente con rs/rc/rg ed è compatibile con rails 2 e 3:

ror + merb = rails3

Si tratta di una fusione colossale, molto più di Fiat e Chrysler o di Sun ed Oracle.
Stiamo parlando di Ruby on Rails, uno dei più interessanti framework per web application esistenti e Merb, i pilastri che hanno fatto di Ruby uno dei linguaggi di sviluppo più interessanti in circolazione.

Personalmente sono convinto sarà un successo, se gli sviluppatori riusciranno a prendere il meglio da entrambi i progetti il risultato sarà eccezzionale. Rails soffre di alcuni difettucci (anche sulle performance) che merb son convinto risolverà.

Quel che mi spaventa è il porting di tutti i progetti su cui lavoriamo che “girano” su rails2 e jruby.

Stiamo partorendo una nuova creatura (ForexDesk) che dovrebbe essere rilasciata prima di rails3, valuteremo il porting appena si saranno calmate le acque e sapremo da che parte sbattere la testa :)

back to java 2 years later

Sembra di guidare un tir con rimorchio nelle stradine di centro città.. ovviamente è anche pieno di traffico e piove :)
come dice Stefano Guglielmetti: “La bellezza di Ruby sta, a mio giudizio, nel rispetto delle cose semplici. Ovvero, non introduce fattori moltiplicatori di difficoltà in stile “Rendere difficile il facile attraverso l’inutile”, per dirla come farebbe mia madre”.

Rubboli.it v.3.0

Nuovo server, nuovo provider, nuova grafica, nuova tecnologia. La nuova versione del sito rubboli.it è sviluppata su Ruby On Rails su un nuovo server basato su ubuntu installato in un datacenter a Londra. Buone Feste!