Développement Web Ruby
par Sylvain CLAUDEL

Derniers posts

Livequery : le plugin jQuery qui permet de faire fonctionner des plugins comme avec live()

Date d'édition 2012-08-02 à 13:05

Il arrive souvent dans son code javascript d'utiliser des plugins jquery qui s'utilisent de cette manière :

$('.ma_classe').monPlugin();

L'inconvénient c'est qu'avec certains plugins qui n'utilisent pas "live" ou bien "delegate" ou "on" de la 'mauvaise manière' <- sous entendez qui ne fonctionne pas avec des éléments que l'on rajoute au DOM. (Voir https://api.jquery.com/live/), nous sommes obligé de rajouter le script après l'ajout ou la requête ajax.

C'est là qu'intervient le plugin livequery (lien en bas) : voici comment transformer le script ci-dessus :

$('.ma_classe').livequery(function(){

  $(this).monPlugin();

});

L'avantage ici c'est que si l'on rajoute des éléments avec la class ma_classe en AJAX ou bien simplement en javascript, il n'y aura plus besoin de rappeller le bout de code $('.ma_classe').monPlugin(); . L'avantage de cette méthode c'est que l'on a pas besoin de lire le source du plugin pour voir quels évènement sont concernés car avec "on" et "live" le paramètre event(s) est obligatoire !

Alors pratique non ?

Le plugin livequery : https://github.com/brandonaaron/livequery

Source : https://stackoverflow.com/questions/5766086/using-jquery-plugins-with-live

Hstore : le NoSql à la mode postgresql

Date d'édition 2012-07-26 à 21:25

hstore permet de stocker un tableau associatif dans une colonne. Voici une vidéo / screencast de présentation et d'utilisation : https://www.youtube.com/watch?feature=player_embedded&v=trycX7CL2A0

Le Gem utilisé est apparemment activerecord-postgres-hstore (vu les sources : https://github.com/heroku/hstore_example/blob/master/Gemfile). Post d'origine : https://schneems.com/post/19298469372/you-got-nosql-in-my-postgres-using-hstore-in-rails

Appartment : le gem qui permet de faire du multi-tenancy avec Postgresql

Date d'édition 2012-07-26 à 14:33

Le multi-tenancy revient à avoir une seule base de données avec les données de plusieurs clients (on aurait pu aussi mettre une clé étrangère sur tous les models mais c'est plus long, moins pratique, beaucoup moins maintenable).

Ce gem exploite les schemas postgresql et permet de switcher de l'un à l'autre très simplement.

Source : https://github.com/bradrobertson/apartment

Beautiful Scaffold version 0.1.1

Date d'édition 2012-07-25 à 16:02

Plein de nouveautés dans Beautiful Scaffold. Tout d'abord les versions ne sont pas compatibles entre elles, donc vous ne devez pas changer la version de beautiful-scaffold dans votre Gemfile.

Voici les nouveautés / modifications :

- Remplacement du thème par le Bootstrap Twitter (facilement modifiable à qui connait le bootstrap)

- Correction de bug i18n sur "yes" et "no" et "are_you_sure"

- Ajout du filtrage des colonnes dans les tableaux

- Ajout d'une méthode dashboard comme page d'accueil ainsi que la route dans le route.rb

- Correction d'un bug sur les clés étrangères (pour le generateur beautiful_migration)

- Affichage de 5 champs par défaut du model dans les tableaux

- Helper pour faire des dropdown menu (bootstrap)

- Ajout d'icons

J'espère que cette nouvelle version vous plaira autant qu'à moi :-)

Test de quelques serveurs d'application pour RubyOnRails (Mongrel, Thin, Unicorn, Webrick, Passenger)

Date d'édition 2012-07-25 à 08:47

Bon je vous mets le fichier texte en vrac, j'ai dû faire ce test il y a 6 mois. Il manque Puma et Rainbows (qui fonctionnent mieux avec Rubinius ou jRuby). Visiblement le meilleur couple c'est Unicorn + Nginx.

# Webrick
RAILS_ENV=production rails s
siege -d1 -r10 -c50 https://192.168.1.17:3000/admin/products
Transactions:                      500 hits
Availability:                 100.00 %
Elapsed time:                  43.96 secs
Data transferred:              14.90 MB
Response time:                  3.55 secs
Transaction rate:              11.37 trans/sec
Throughput:                     0.34 MB/sec
Concurrency:                   40.41
Successful transactions:         500
Failed transactions:               0
Longest transaction:            7.52
Shortest transaction:           0.88
# Mongrel 1.2.0.pre2
ajout de mongrel dans le gemfile
RAILS_ENV=production rails s
siege -d1 -r10 -c50 https://192.168.1.17:3000/admin/products
Transactions:                      500 hits
Availability:                 100.00 %
Elapsed time:                  42.70 secs
Data transferred:              14.90 MB
Response time:                  3.30 secs
Transaction rate:              11.71 trans/sec
Throughput:                     0.35 MB/sec
Concurrency:                   38.69
Successful transactions:         500
Failed transactions:               0
Longest transaction:           17.06
Shortest transaction:           0.06
# Thin 1.3.1
ajout de thin dans le Gemfile puis
bundle exec thin -e production start
siege -d1 -r10 -c50 https://192.168.1.17:3000/admin/products
Transactions:                      500 hits
Availability:                 100.00 %
Elapsed time:                  39.92 secs
Data transferred:              14.90 MB
Response time:                  3.29 secs
Transaction rate:              12.53 trans/sec
Throughput:                     0.37 MB/sec
Concurrency:                   41.22
Successful transactions:         500
Failed transactions:               0
Longest transaction:            4.42
Shortest transaction:           0.07
# Unicorn 4.2.0
ajout de Unicorn dans le Gemfile puis
bundle exec unicorn -E production -p 3000
siege -d1 -r10 -c50 https://192.168.1.17:3000/admin/products
Transactions:                      500 hits
Availability:                 100.00 %
Elapsed time:                  52.82 secs
Data transferred:              14.90 MB
Response time:                  4.52 secs
Transaction rate:               9.47 trans/sec
Throughput:                     0.28 MB/sec
Concurrency:                   42.76
Successful transactions:         500
Failed transactions:               0
Longest transaction:           17.07
Shortest transaction:           0.29
# Passenger 3.0.11 + nginx (installation automatique)
installation de passenger + nginx
sudo /opt/nginx/sbin/nginx
server {
listen 3000;
server_name 192.168.1.17;
root /path_to_myapp/public;   # <--- be sure to point to 'public'!
passenger_enabled on;
}
siege -d1 -r10 -c50 https://192.168.1.17:3000/admin/products
Transactions:                      500 hits
Availability:                 100.00 %
Elapsed time:                  30.69 secs
Data transferred:              14.90 MB
Response time:                  2.21 secs
Transaction rate:              16.29 trans/sec
Throughput:                     0.49 MB/sec
Concurrency:                   36.07
Successful transactions:         500
Failed transactions:               0
Longest transaction:            9.46
Shortest transaction:           0.11
# Passenger 3.0.11 + nginx (installation automatique) avec worker_processes  2; dans nginx.conf
siege -d1 -r10 -c50 https://192.168.1.17:3000/admin/products
Transactions:                      500 hits
Availability:                 100.00 %
Elapsed time:                  31.76 secs
Data transferred:              14.90 MB
Response time:                  2.30 secs
Transaction rate:              15.74 trans/sec
Throughput:                     0.47 MB/sec
Concurrency:                   36.13
Successful transactions:         500
Failed transactions:               0
Longest transaction:           10.18
Shortest transaction:           0.07
# Unicorn (worker_processes 2) + nginx (worker_processes 1)
sudo /opt/nginx/sbin/nginx
sudo bundle exec unicorn_rails -c /home/riven/myapp/config/unicorn2.rb -E production -D
Transactions:                  500 hits
Availability:                 100.00 %
Elapsed time:                  23.42 secs
Data transferred:              14.88 MB
Response time:                  1.64 secs
Transaction rate:              21.35 trans/sec
Throughput:                     0.64 MB/sec
Concurrency:                   34.92
Successful transactions:         500
Failed transactions:               0
Longest transaction:            2.02
Shortest transaction:           0.11
# Unicorn (worker_processes 2) + nginx (worker_processes 2)
sudo /opt/nginx/sbin/nginx
sudo bundle exec unicorn_rails -c /home/riven/myapp/config/unicorn2.rb -E production -D
Transactions:                  500 hits
Availability:                 100.00 %
Elapsed time:                  23.57 secs
Data transferred:              14.88 MB
Response time:                  1.61 secs
Transaction rate:              21.21 trans/sec
Throughput:                     0.63 MB/sec
Concurrency:                   34.06
Successful transactions:         500
Failed transactions:               0
Longest transaction:            2.01
Shortest transaction:           0.06
# Unicorn (worker_processes 2) + nginx (worker_processes 4)
sudo /opt/nginx/sbin/nginx
sudo bundle exec unicorn_rails -c /home/riven/myapp/config/unicorn2.rb -E production -D
Transactions:                  500 hits
Availability:                 100.00 %
Elapsed time:                  23.21 secs
Data transferred:              14.88 MB
Response time:                  1.59 secs
Transaction rate:              21.54 trans/sec
Throughput:                     0.64 MB/sec
Concurrency:                   34.23
Successful transactions:         500
Failed transactions:               0
Longest transaction:            1.99
Shortest transaction:           0.07
# Unicorn (worker_processes 6) + nginx (worker_processes 2)
sudo /opt/nginx/sbin/nginx
sudo bundle exec unicorn_rails -c /home/riven/myapp/config/unicorn2.rb -E production -D
Transactions:                  500 hits
Availability:                 100.00 %
Elapsed time:                  25.73 secs
Data transferred:              14.88 MB
Response time:                  1.90 secs
Transaction rate:              19.43 trans/sec
Throughput:                     0.58 MB/sec
Concurrency:                   36.91
Successful transactions:         500
Failed transactions:               0
Longest transaction:            2.59
Shortest transaction:           0.08
# Unicorn (worker_processes 12) + nginx (worker_processes 2)
sudo /opt/nginx/sbin/nginx
sudo bundle exec unicorn_rails -c /home/riven/myapp/config/unicorn2.rb -E production -D
Transactions:                  500 hits
Availability:                 100.00 %
Elapsed time:                  27.33 secs
Data transferred:              14.88 MB
Response time:                  2.04 secs
Transaction rate:              18.29 trans/sec
Throughput:                     0.54 MB/sec
Concurrency:                   37.35
Successful transactions:         500
Failed transactions:               0
Longest transaction:            3.54
Shortest transaction:           0.06
Développement ruby et geekeries - rivsc