Une journée dédiée à MongoDB

mongoFR badges

Le 21 Juin se tiendra à Paris un événement auquel je vous invite à venir. Cet événement sera dédié à MongoDB, le MongoFR.

J'ai la chance de pouvoir proposer une petite conférence sur un retour d'expérience : ma migration de SQL à MongoDB sur Oupsnow. Hormis les développeurs de 10Gen, il n'y aura que des Rubyists.

Selon moi, cette nouvelle technologie qu'est MongoDB est assez prometteuse.

Pour découvrir MongoDB, venez nombreux le 21 Juin !

English translation[...]

Published on Mer 19 mai 2010 13:24
0 commentaires

Oupsnow 0.5.0 est sortie

Ca y est, j'ai presque pris un cycle de release pas trop mauvais. Ainsi après seulement un mois après la version 0.4.1 de Oupsnow, voici la version 0.5.0. Cette version apporte quelque feature, mais marque surtout un moment de stabilité dans le code.

Les nouveautés

  • Ajout d'un filtre sur la recherche des tickets pour ne voir que les tickets fermé ou non
  • Possibilité d'éditer une milestone pour les admin d'un projet
  • Possibilité de définir une milestone comme actuelle. Par défaut, c'est la première milestone créée
  • Possibilité de récupérer son password par email
  • Possibilité de rester connecter avec un remember_me
  • Ajout d'information concernant le nombre de tickets filtrés ou vues
  • Possibilité pour chaque utilisateur loggé de suivre un ticket. Un utilisateur qui suit un ticket recevra ainsi à chaque mise à jour de ce ticket un email concernant cette modification.
  • Les utilisateurs ne peuvent plus changer leur email.

Enfin comme d'habitude voici mon fichier capistrano de déployement pour faciliter celui-ci.

Ficher de déployement capistrano

set :application, "oupsnow"
set :repository,  "git://github.com/shingara/oupsnow.git"
set :domain, "dev.shingara.fr"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "XXXXXXXXX"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion
set :scm, :git
set :git_enable_submodules, 1

set :runner, "xxxx"
set :user, "xxxx"
set :use_sudo, false

set :thin_conf, "/etc/thin/#{domain}.yml"

set :rails_env, "production"                                                                                                                                   

role :app, domain
role :web, domain
role :db,  domain, :primary => true

task :update_config, :roles => [:app] do
  run "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml"
  run "ln -s #{shared_path}/config/email.yml #{release_path}/config/email.yml"
  run "ln -s #{shared_path}/config/initializers/errornot.rb #{release_path}/config/initializers/errornot.rb"
  run "cd #{release_path} && echo 'GOOGLE_ANALYTICS=\"XXXXXXXX\"' >> config/environment.rb"
end

namespace :deploy do
  task :start, :roles => [:app] do
    run "thin -C #{thin_conf} start"
  end 

  task :stop, :roles => [:app] do
    run "thin -C #{thin_conf} stop"
  end 

  task :restart, :roles => [:app] do
    run "thin -C #{thin_conf} restart"
  end 
end

task :update_db do
  run "cd #{current_path} && RAILS_ENV=#{rails_env} rake db:update"
end

after "deploy:update_code", :update_config
after "deploy:symlink", :update_db

English translation[...]

Published on Lun 15 mars 2010 21:26
0 commentaires

Sortie de Oupsnow 0.4.0

Ca y est, Oupsnow 0.4.0 est enfin sorti. Cette version est un refactoring quasiment complet. Après avoir eu une version 0.3.0 en Merb/DataMapper, cette version est désormais en Rails/MongoDB. Le back-end et le serveur ont changé.

Cette nouvelle version, outre son refactoring comprend aussi l'ajout de quelques nouvelles fonctionnalités.

  • Ajout d'un filtre par Status dans la recherche de ticket
  • Ajout de la possibilité de changer la fonction de tous les membres d'un project
  • Ajout de la preview des tickets et commentaires sur les tickets
  • Ajout de la visualisation de la milestone courante dans la visualisation d'un ticket
  • Possibilité d'ordonner tous les champs de recherche dans la vue des tickets
  • Login par l'email et plus par le pseudo

Vous pouvez télécharger cette version sur rubyforge

Si vous souhaitez tester cette version, une version de demo de oupsnow est en ligne. Les login/mdp sont : admin@admin.com/oupsnow. Amusez vous bien.

[...]
Published on Mar 01 déc 2009 22:02
2 commentaires

Devise ? c'est bien, mais il faut le tester.

Alors que j'ai évoqué ma migration de Merb à Rails pour Oupsnow, il a fallu trouver un système d'authentification ORM Agnostique.

Le plugin d'authentification le plus connu à l'heure actuel est Authlogic. Ce plugin est vraiment très performant, mais tous les essais de le rendre ORM Agnostique ont été vain. C'est alors qu'au même moment, durant le Rails Summit 2009, George Guimarães et Carlos Antonio annoncent la sortie de Devise, un plugin Rails au dessus de Warden ( Rack middleware d'authentification). C'est exactement, ce qu'il me faut, un nouveau système d'authentification a tester et peut-être une possibilité d'ajouter une couche d'ORM Agnostique dedans. En plus Warden étant un RackMiddleware, je pourrais un peu tester ce que ça donne.

J'installe donc Devise et commence à l'utiliser dans Oupsnow. Tout se passe à merveille, jusqu'au moment où il faut faire les tests. Tout de suite le bât blesse. Les tests controlleurs de Rails ne communiquent pas avec la couche Rack qui n'est pas initialisée. On se retrouve donc avec une impossibilité de définir si un utilisateur est loggé ou non et si oui, qui est cet utilisateur.

Après de nombreux tests et essais. J'ai fini par trouver comment faire. Warden ajoute à la requête une variable d'environment dans la requête. On peux y accéder par request.env['warden']. Il suffit donc de remplir cette variable.

Pour avoir un utilisateur non loggé, il faut faire :

def unlogged
  request.env['warden'] = Warden::Proxy.new(request.env, {:default_strategies => [:rememberable, :authenticable],:silence_missing_strategies => true})
end

Pour se logger avec un utilisateur en particulier il faut faire :

def logged_as(user)
  proxy = Warden::Proxy.new(request.env, {:default_strategies => [:rememberable, :authenticable], :silence_missing_strategies => true})
  proxy.set_user(user, :store => true, :scope => :user)
  request.env['warden'] = proxy
end

Personnellement, j'aime beaucoup devise. A tel point que j'ai permis de le rendre ORM Agnostique et compatible avec MongoMapper.

EDIT du 30 Novembre 2009: la technique indiquée ici n'est pas optimum et ne marche pas avec les dernières versions de Devise. utilisez plutôt la technique décrite dans mon ticket Comment tester devise ? réélement ?

[...]
Published on Jeu 19 nov 2009 22:36
0 commentaires

Oupsnow de Merb à Rails

Dernièrement, j'ai fini par me décider de migrer Oupsnow, de Merb à Rails.

Alors que je finissais une migration de SQL à MongoDB, j'en entame une nouvelle. Celle-ci beaucoup plus profonde.

La raison de ma migration ?

Rails 3. En effet, depuis Décembre 2008, soit presque un an, Merb s'est figé. Certain me diront que la communauté Merb est en train de revivre et c'est tout à fait vrai. J'en suis même ravi. Mais Merb a pris un immense retard en presque un an. Même si Rails n'a pas vraiment avancé dans sa version stable, sa version Edge a elle énormément avancée.

Voulant toujours tester les nouvelles technologies en Ruby, je voudrais tester Rails 3. Mais aucun système n'existe pour passer de Merb à Rails 3. Un rapide test m'a montré que la différence était par contre minime entre Rails 2.3.x et Rails 3. La migration de Rails 2.3.x à Rails 3 en sera donc d'autant plus simple.

Voulant vraiment sortir une version stable le plus vite possible, j'ai donc pris la décision de migrer Oupsnow vers Rails 2.3.x pour ensuite migrer sur Rails 3 pour cette fois sortir une version de Oupsnow compatible Rails 3.

Oupsnow devient donc un projet Rails/MongoMapper et non plus Merb/DataMapper comme sa dernière version. Toute aide est bien-sûr la bienvenue.

English translation

[...]
Published on Mer 18 nov 2009 22:47
3 commentaires

Sortie de Oupsnow 0.2.0 avec mise en production

Ca y est, après moins d'un mois, voici la nouvelle version de Oupsnow. Cette version 0.2.0 est la première version que je mets moi même en production. En effet, désormais ma platforme de développement n'est plus propulsé par Redmine, c'est Oupsnow.

Les nouveautés de cette version sont les suivantes :

  • Un converteur Redmine -> Oupsnow a été intégré. C'est grâce à lui que j'ai pu changer ma platforme de développement sans perte.

On été ajouté :

  • Une gestion des milestones
  • Une gestion des Etats des tickets
  • Une gestion des Sévérité des tickets
  • Formatage des textes avec RedCloth

Après cette nouvelle release, j'ai vais pouvoir me reconcentrer sur Typo et ainsi faire la fonctionnalité phare de la version 5.2.1.

English translation

[...]
Published on Mar 10 fév 2009 20:09
2 commentaires

Sortie de la première version de Oupsnow 0.1.0

Je suis assez content de vous présenter Oupsnow. En effet, après avoir participé à redmine et l'avoir utilisé, j'ai décidé de créer mon propre bug tracker. Je trouvais de plus en plus de défauts à Redmine qui n'était pas comblé. Il est très fortement inspiré de Lighthouse qui a l'avantage d'être vraiment simple d'utilisation.

Voici donc la première version qui sort après 2 mois de développement. Elle est encore loin d'être un produit complètement fini. Mais elle commence à avoir un début de fonctionnalité suffisante. De plus Oupsnow est un produit réalisé avec Merb. J'ai ainsi pu découvrir et approfondir Merb grâce à ce projet.

Dans la prochaine release, j'améliorerais un peu l'administration. Je créerais aussi un convertisseur de Redmine vers Oupsnow. Cela entrainera ma migration vers Oupsnow à la place de redmine pour ma plateforme de développement

J'ai mis en place une version de démonstration pour vous que ayez une idée de ce que Oupsnow permet.

En bonus, voici mon fichier deploy.rb qui m'a permis de déployer la version de démonstration de Oupsnow par capistrano

set :application, "oupsnow"
set :repository,  "git://github.com/shingara/oupsnow.git"
set :domain, "shingara.fr"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/var/rails/oupsnow-demo"
set :deploy_via,            :remote_cache
set :repository_cache,      "#{application}-src"



# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion
set :scm, :git
set :git_enable_submodules, 1

set :runner, "rails"
set :user, "rails"
set :use_sudo, false
set :rack_up, "/etc/thin/oupsnow-demo.ru"
set :merb_port, 46000

role :app, domain
role :web, domain
role :db,  domain, :primary => true

task :update_config, :roles => [:app] do
  run "ln -s #{shared_path}/config/database.yml #{release_path}/config/database.yml"
end

namespace :deploy do
  task :start, :roles => [:app] do
    run "merb -u #{user} -G #{user} -d -c 1 -p #{merb_port} -n #{application} -a thin -e production -m '#{deploy_to}/current/'"
  end

  task :stop, :roles => [:app] do
    run "merb -u #{user} -G #{user} -d -c 1 -K all -p #{merb_port} -n #{application} -a thin -e production -m '#{deploy_to}/current/'"
  end

  task :restart, :roles => [:app] do
    deploy.stop
    deploy.start
  end
end

after "deploy:update_code", :update_config

English translation

[...]
Published on Mer 21 jan 2009 17:54
1 comment

RSS Follow me on Twitter