En cours de développement, vos modifications de feuilles de style n’apparaissent pas sur le site ? C’est normal !
La structure de l’application est complexe. Si vous respectez l’architecture recommandée (version 0.11), vos feuilles de styles sont dans vendor/extensions/theme_xxxx/public/stylesheets/ (si votre thème s’appelle xxxx).
Le serveur web n’est pas configuré pour aller chercher les assets ailleurs que dans public. Au démarrage de votre application, les fichiers CSS sont donc recopiés des répertoires des extensions dans le répertoire public principal.
Remarque finale : pour la même raison, un commit ou un status dans votre système de gestion de version vous montrera les vieux fichiers dans public si vous n’avez pas relancé votre serveur entre temps.
Un jour ou l’autre vous allez avoir besoin d’une gem qui exige une version plus récente de Ruby. Par exemple sqlite3.
$ sudo gem install sqlite3
Password:
ERROR: Error installing sqlite3:
sqlite3 requires Ruby version >= 1.9.1.
Mais vous utilisez des gems qui ne sont pas compatibles avec Ruby 1.9 et vous devez donc faire cohabiter plusieurs versions de Ruby. C’est là que RVM intervient.
Installer RVM sur Leopard
Passez la commande suivante dans une fenêtre de Terminal :
$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
Puis ajoutez cette ligne à la fin de votre fichier ~/.profile :
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
Pour tous les détails additionnels, allez à la source.
Utiliser RVM
Vous pouvez maintenant utiliser rvm, par exemple pour installer Ruby 1.9.1.
$ rvm install 1.9.1 ; rvm 1.9.1
$ ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin9.8.0]
$ sudo gem install sqlite3
Building native extensions. This could take a while...
...
Successfully installed sqlite3-0.1.1
Pour revenir à la version d’origine :
$ rvm system
$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9.8.0]
L’Osborne 1 a été le premier portable (définition : qui a une poignée). TechRepublic publie une belle galerie de photos.
Un nouveau mème circule : sur Wikipedia, tous les liens mènent à l’article Philosophie ou forment une boucle.
Méthode
- Choisir un article ou cliquer sur Un article au hasard.
- Cliquer sur le premier lien de l’article. Nous excluons les liens techniques de Wikipedia (ex. Cet article est une ébauche etc.), les tables des matières, la phonétique…
- Répéter jusqu’à tomber sur l’article Philosophie ou sur une boucle (on retombe cycliquement sur les mêmes liens).
Test de l’hypothèse
Premier essai
Deuxième essai
Il n’est pas nécessaire d’aller jusqu’à la boucle ; si on tombe sur latin, on sait que ça se termine en boucle.
En fait, l’hypothèse est probablement valable quel que soit l’article choisi. C’est la probabilité de tomber dessus qui change. Ainsi, il est plus probable de tomber sur Philosophie que sur Pablo Picasso, mais la logique est la même.
Par défaut, le Finder affiche uniquement le nom du répertoire en cours comme titre de page. C’est peut-être suffisant pour votre musique, mais quand vous avez deux douzaines de projets Rails en cours (ou plusieurs branches d’un projet), ça ne vous avance pas tellement de savoir que vous êtes dans models ou dans controllers.
Vous pouvez faire afficher le chemin complet dans la barre de titre en passant une commande dans un Terminal :
defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES
Ensuite il faut relancer le Finder, soit en rebootant (à la Windows) soit en envoyant un signal à la tâche (à la Unix) :
Et hop !
via TUAW
have_tag (RSpec) et assert_select (Rails) facilitent le test des vues grâce à une syntaxe proche de celle du CSS. Vérifions par exemple la présence d’un titre qui contient le texte Subtitle et d’un formulaire (id= »swap ») avec deux boutons radio et un bouton de soumission (class= »button_save ») :
response.should have_tag("h2", /Subtitle/)
response.should have_tag("form#swap[method=post]")
response.should have_tag("form#swap input[type=radio][name=?]", 'part1')
response.should have_tag("form#swap input[type=radio][name=?]", 'part2')
response.should have_tag("form#swap input.button_save[type=submit]")
Autre exemple, un formulaire AJAX dans sa div (id= »filter », mais vous avez compris maintenant) avec une liste déroulante, avec soumission par GET sur changement de la sélection :
response.should have_tag("select option", "All")
response.should have_tag("select option", /20/)
response.should_not have_tag("select option", /21/)
response.should have_tag("div#filter form[method=?]", 'get')
response.should have_tag("div#filter form select[onchange=?]", 'this.form.submit()')
La syntaxe du sélecteur a beau être proche de celle du CSS, il est difficile de s’en rappeler toutes les subtilités. C’est là qu’intervient l’excellente cheat sheet créée par Assaf Arkin de Labnotes. Indispensable
Firefox 3.1 offre bien des nouveautés intéressantes, en particulier un nouvel interpréteur de Javascript d’une extrême rapidité. La liste des évolutions entre les versions 3.0 et 3.1 est impressionnante; bien des éditeurs de logiciel en auraient fait une changement de version majeure.
Mais nous utilisons aussi des modules complémentaires dont certains sont indispensables. En ce qui me concerne, je ne pourrais développer sans Firebug ou Web Developer. Pencil me sert pour les maquettes. L’absence de All-in-one Gestures m’handicape grandement.
Heureusement, l’équipe Firefox publie l’état de compatibilité des modules les plus utilisés. La page regroupe les modules représentant 95% des usages recensés…
Capistrano est un outil de déploiement puissant et facile d’emploi, dont j’ai déjà parlé. Il tourne sous Windows, Mac OS et Linux (entre autres) et est d’une mise en service aisée si l’on connait ssh et subversion.
C’est pourquoi j’ai été fort (désagréablement) surpris quand mon récent cap deploy a échoué avec le message d’erreur suivant :
c:/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.1/lib/capistrano/recipes/deploy.rb:97:in ``': No such file or directory - svn info http://svn.example.com/
On comprend bien qu’il s’agit de ma machine mobile et portable qui tourne sous Windows Vista. Le client SVN de choix sous Windows reste sans conteste TortoiseSVN. Malheureusement (d’une certaine manière), TortoiseSVN est un vrai client Subversion et non un wrapper graphique s’appuyant sur l’exécutable svn (en ligne de commande donc).
Or Capistrano invoque l’exécutable sus-cité, et ne le trouve pas. Solution simple et rapide : installer le client officiel SVN, que l’on peut trouver ici.
Et hop !
Une spécification de vue sous RSpec pourrait ressembler à ça :
it "should render column titles" do
render "/feeds/index.html.erb"
response.should have_tag("tr>th", "name")
response.should have_tag("tr>th", "url")
end
Mais cette méthode ne permet pas de tester les bribes de HTML qui sont produites dans un content_for. En effet, ces bribes sont incluses directement dans le layout, pas dans la production de la vue. Pour ce faire, ajouter dans spec_helper.rb :
def content_for(name)
response.template.instance_variable_get("@content_for_#{name}")
end
Puis dans les specs :
it "should render a 'New feed' link" do
render "/feeds/index.html.erb"
content_for(:somewhere).should have_tag("a[href=?]", new_feed_path)
end
Merci à Carl-Johan Kihlbom.
Si votre nom d’utilisateur courant n’est pas celui qui vous permet d’accéder à votre système de gestion de version, vous pouvez le spécifier dans deploy.rb.
Par contre, le nom de ce symbole a été harmonisé. C’était par exemple :scm_user pour Mercurial ou :p4user pour Perforce). Il faut maintenant utiliser :scm_username, au moins pour Subversion. La compatibilité est maintenue pour Mercurial et Perforce.
Vous pouvez également spécifier :scm_password. L’inconvénient dans le cas de Subversion est que ce mot de passe est affiché en clair sur l’écran.