Capistrano: erreur "rake aborted! Could not determine latest

Salut tout le monde,

Je procède actuellement à une install d’Apache2, Capistrano et Mongrel.
J’ai installé Subversion et tout va bien pour le versioning. En tout
cas, j’ai suivi tout ce qui est indiqué sur ce petit tutoriel
http://www.blog.fbollon.net/archives/39, et tout fonctionne… jusqu’au
déploiement. Là j’ai un couac:

myserver:/path/to/my/application# rake --trace deploy
(in /path/to/my/application)
** Invoke deploy (first_time)
** Invoke remote:deploy (first_time)
** Execute remote:deploy
    loading configuration
/usr/lib/ruby/gems/1.8/gems/capistrano-1.2.0/lib/capistrano/recipes/standard.rb
    loading configuration ./config/deploy.rb
    loading configuration
/usr/lib/ruby/gems/1.8/gems/mongrel_cluster-0.2.1/lib/mongrel_cluster/recipes.rb
  * executing task deploy
  * executing task update
 ** transaction: start
  * executing task update_code
  * querying latest revision...
svn: invalid option: --limit
Type 'svn help' for usage.
*** [update_code] transaction: rollback
  * [update_code] rolling back
  * executing "rm -rf 

/path/to/my/application/releases/20061121102421"
servers: [“myapplication.com”]
Password: xxxxxxxx

    [ecox.com] executing command
    command finished
*rake aborted!*
*Could not determine latest revision*
/usr/lib/ruby/gems/1.8/gems/capistrano-1.2.0/lib/capistrano/scm/subversion.rb:24:in
`latest_revision'
(... suite du trace ...)

Google est plutôt pauvre en résultats pour cette erreur. Avez-vous une
piste?

Bonne journée à tous,

Michael

Si tu as la possibilité de nous mettre ton deploy.rb, je pense qu’il
doit manque quelques infos dans celui-ci :slight_smile:

Sinon >> executing “rm -rf
/path/to/my/application/releases/20061121102421” …
C’est toi qui a modifié cette ligne on est d’accord? :slight_smile:

Julien ALEXANDRE a écrit :

Si tu as la possibilité de nous mettre ton deploy.rb, je pense qu’il
doit manque quelques infos dans celui-ci :slight_smile:
Le voici ci-dessous. C’est possible qu’il manque quelque chose, en effet
:wink:
Sinon >> executing “rm -rf
/path/to/my/application/releases/20061121102421” …
C’est toi qui a modifié cette ligne on est d’accord? :slight_smile:
Oui c’est moi qui ai mis /path/to/my/application car je travaille sur
une appli ultra-secrète dont je ne peux pas dévoiler le nom :slight_smile:

CONFIG/DEPLOY.RB:

require 'mongrel_cluster/recipes'

set :user, "root"
set :application, "ecox.com"
set :repository, "file:///home/svn-repository/ecox/trunk"
set :svn_username, "root"

role :web, application
role :app, application
role :db, application

set :deploy_to, "/home/web/ecox.com/ftp/www"
set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"

desc <<DESC
An imaginary backup task. (Execute the 'show_tasks' task to display 

all
available tasks.)
DESC
task :backup, :roles => :db, :only => { :primary => true } do
on_rollback { delete “/tmp/dump.sql” }

  run "mysqldump -u theuser -p thedatabase > /tmp/dump.sql" do |ch,
stream, out|
    ch.send_data "thepassword\n" if out =~ /^Enter password:/
  end
end

desc "Demonstrates the various helper methods available to recipes."
task :helper_demo do
  setup

  buffer = render("maintenance.rhtml", :deadline => ENV['UNTIL'])
  put buffer, "#{shared_path}/system/maintenance.html", :mode => 

0644
sudo “killall -USR1 dispatch.fcgi”
run “#{release_path}/script/spin”
delete “#{shared_path}/system/maintenance.html”
end

desc "A task demonstrating the use of transactions."
task :long_deploy do
  transaction do
    update_code
    disable_web
    symlink
    migrate
  end

  restart
  enable_web
end

J’ai mis ceci, que j’ai repris du post de départ du thread nommé
“capistrano et mongrel cluster”:

set :repository, "svn+ssh://root@(ip du
serveur)/home/svn-repository/myapplication/trunk"

Mais j’ai toujours la même erreur en faisant “rake deploy”.

A la racine de mon projet, si je fais “svn info”:

myserver:/path/to/my/application# svn info
(...)
URL: file:///home/svn-repository/myapplication/trunk
(...)

Mon repository se trouve bien à l’emplacement /home/svn-repository. Mais
est-ce bien normal qu’il n’y ait pas de dossier nommé “myapplication”
dans ce dossier (résultat d’un “ls”: conf dav db format hooks
locks README.txt)?

Michael

Julien ALEXANDRE a écrit :

tu as fais :

svnadmin create /home/svn-repository ?
Si oui, alors le problème est là :wink:

“svnadmin create” va créer un nouveau repository … si tu veux les
centraliser alors il faut créer un répertoire /home/svn (ou n’importe
quoi d’autre) et c’est dans celui-ci que tu fera tes “svnadmin create
/home/svn/myapplication”

J’espere ne pas dire une betise, mais il me semble bien que capistrano
ne gere pas les repos en “file://path”

Il faut mettre quelque chose dans ce genre la >> set :repository,
“svn://ip/path/to/ecox/trunk”

Il faut que le checkout puisse se faire depuis ton serveur.

Michael :

J’appelle “client” la machine à partir de laquelle tu lances le
déploiement, et serveur, le serveur de déploiement.

J’ai mis ceci, que j’ai repris du post de départ du thread nommé
“capistrano et mongrel cluster”:

set :repository, "svn+ssh://root@(ip du
serveur)/home/svn-repository/myapplication/trunk"

Mais j’ai toujours la même erreur en faisant “rake deploy”.

T’as toujours la même erreur car tu as 2 problèmes :

  • faire en sorte que le référentiel Subversion soit accessible
    depuis le client et le serveur.
  • pouvoir récupérer la dernière révision côté client.

tu n’as pas résolu le second problème :

  • svn --version

  • svn help log
    pour vérifier si l’option --limit est bien présente

  • svn log -q --limit 1
    pour choper le numéro de révision “à la main”

si la commande ne passe pas, c’est pas la peine
d’aller plus loin -> mettre à jour svn côté client.

(rien ne t’empêche après de tester le checkout côté serveur
“Ã la main”)

– Jean-François.

Alexandre: en effet je crois avoir fait “svnadmin create
/home/svn-repository”… J’ai donc supprimer ce dossier, créé /home/svn
et exécuté “svnadmin create /home/svn/myapplication” dans le dossier de
mon application. Mais quand j’exécute “svn info”, il me donne toujours
l’URL “file:///home/svn-repository/ecox/trunk”.

Jean-François: voici ci-dessous les résultats des différentes
commandes.

  • svn --version
myserver:/path/to/my/application# svn --version
svn, version 1.1.4 (r13838)
  • svn help log
    pour vérifier si l’option --limit est bien présente
    L’option --limit n’est pas présente :\
  • svn log -q --limit 1
    pour choper le numéro de révision “à la main”
    myserver:/path/to/my/application# svn log -q
    svn+ssh://root@localhost/home/svn/myapplication --limit 1
    svn: invalid option: --limit
    si la commande ne passe pas, c’est pas la peine
    d’aller plus loin -> mettre à jour svn côté client.
    J’ai installé subversion en faisant simplement “apt-get install
    subversion”. Je devrais procéder autrement?

Alexandre:
Julien :wink:

en effet je crois avoir fait “svnadmin create
/home/svn-repository”… J’ai donc supprimer ce dossier, créé /home/svn
et exécuté “svnadmin create /home/svn/myapplication” dans le dossier de
mon application. Mais quand j’exécute “svn info”, il me donne toujours
l’URL “file:///home/svn-repository/ecox/trunk”.
en fait svnadmin create /path/to/repos va creer un repository “vierge”

En suite il faudra faire un “import” de ton projet dedans.
Puis creer un copie de travail de ce repos (checkout)

je te conseil de lire ce petit wiki que j’ai réalisé suite a de
nombreuses prises de tête sur SVN :slight_smile:
http://wiki.bwabwa.be/wakka.php?wiki=RailsCapistranoSubversionGentooTiger

Sinon, dis nous comment se présente ton archi : config du serv, config
du client, et qui fait quoi (où est ton serveur svn : client?
serveur?) etc…

je te conseil de le mettre sur ton serveur, “capistrano” va y accéder
lors du deploy pour faire le checkout … dans la mésure du possible
il lui faudrait une URL valide (localhost c’est moyen) svn://ndd (ou
l’ip)/myapplication par exemple !

Il faudrait que tu arrives a faire un “svn co
svn+ssh://root@IP_ou_NDD/myapplication” de n’importe où (du client, du
serveur).

Julien ALEXANDRE a écrit :

Alexandre:
Julien :wink:
Oups :slight_smile:
en effet je crois avoir fait “svnadmin create
/home/svn-repository”… J’ai donc supprimer ce dossier, créé /home/svn
et exécuté “svnadmin create /home/svn/myapplication” dans le dossier de
mon application. Mais quand j’exécute “svn info”, il me donne toujours
l’URL “file:///home/svn-repository/ecox/trunk”.
en fait svnadmin create /path/to/repos va creer un repository “vierge”

En suite il faudra faire un “import” de ton projet dedans.
OK, ça c’est fait… :slight_smile:
Puis creer un copie de travail de ce repos (checkout)

myserver:/path/to/my/application# svn checkout
svn+ssh://root@localhost/home/svn/myapplication .
Password: xxxxxxx
svn: '' is already a working copy for a different URL; run 'svn
update' to complete it.

→ en effet, “svn info” balance toujours l’url de mon ancien “mauvais”
repository.

je te conseil de lire ce petit wiki que j’ai réalisé suite a de
nombreuses prises de tête sur SVN :slight_smile:
http://wiki.bwabwa.be/wakka.php?wiki=RailsCapistranoSubversionGentooTiger
Je m’y étais déjà plongé, ainsi que dans les références que tu cites. Je
vais m’y plonger plus profondément.
Sinon, dis nous comment se présente ton archi : config du serv, config
du client, et qui fait quoi (où est ton serveur svn : client?
serveur?) etc…
En fait, pour le moment, serveur et client sont la même machine. Pour le
moment, je travaille seul sur ce projet et je fais les modifications aux
fichiers directement sur le serveur. Il s’agit d’une distribution Debian
Sarge avec Ruby 1.8.5 et Rails 1.1.6.
je te conseil de le mettre sur ton serveur, “capistrano” va y accéder
lors du deploy pour faire le checkout … dans la mésure du possible
il lui faudrait une URL valide (localhost c’est moyen) svn://ndd (ou
l’ip)/myapplication par exemple !
Comment faire pour que svn://ip/myapplication soit reconnu? Pour le
moment, j’ai ça:

myserver:/path/to/my/application# svn checkout
svn://ip_du_serveur/myapplication
svn: Can't connect to host 'ip_du_serveur': Connection refused

Il faudrait que tu arrives a faire un “svn co
svn+ssh://root@IP_ou_NDD/myapplication” de n’importe où (du client, du
serveur).
En tout cas, merci pour vos aides. Je cafouille pas mal mais j’apprends
de mieux en mieux comment tout cela fonctionne…

Michael

Julien ALEXANDRE a écrit :

Si tout est sur la même machine l’interêt de Capistrano est limité au
simple apprentissage, cependant je te conseil de faire comme ceci :
Oui c’est pour l’apprentissage… À terme, quand j’aurai ma
multinationale spécialisée en Web 4.0, on sera à plusieurs à bosser sur
le projet et plein de serveurs. Capistrano sera super pratique :slight_smile:
Déjà diviser ton espace de travail en 2 (+1)
a. production
b. dev
(c. ) repertoire actuel (qui ne servira plus, ou alors pour des
simples backups … quoi qu’avec SVN normalement… :wink:
J’ai désormais 3 dossiers:

a. /path/to/my/application/prod
b. /path/to/my/application/dev
c. /path/to/my/application/original
  • Créer le repos (svnadmin create /home/svn/monapp)
    -> OK
  • Faire un import de “c.” dans le nouveau repos
myserver:/path/to/my/application/original# svn import -m "Import
initial" file:///home/svn/myapplication/trunk

-> OK

  • Faire un checkout du repos dans “b.” (tu as donc une copie de
    travail … svn info pour être sur)
myserver:/path/to/my/application/dev# svn co
file:///home/svn/myapplication/trunk .

-> OK

  • (re-)Configurer Capistrano (en lui spécifiant “a.” comme repetoire
    pour l’application finale) / Faire les modifs necessaires… + commit
    eventuel.
    J’ai juste remodifié /path/to/my/application/dev/config/deploy.rb, en
    changeant ceci:
set :repository, "file:///home/svn/myapplication/trunk" (puisque je
serais déjà content que ça fonctionne en local)
set :deploy_to, "/path/to/my/application/prod"
  • Deployer + Croiser les doigts :wink:
    D’abord j’ai fait ceci:
myserver:/path/to/my/application/dev# rake remote:exec ACTION=setup

-> OK (les dossiers ‘releases’ et ‘shared’ ont été créés dans
/path/to/my/application/prod)
Puis je fais:

myserver:/path/to/my/application/dev# rake deploy

Et là , à nouveau la même erreur :’(

(in /path/to/my/application/dev)
    loading configuration
/usr/lib/ruby/gems/1.8/gems/capistrano-1.2.0/lib/capistrano/recipes/standard.rb
    loading configuration ./config/deploy.rb
    loading configuration
/usr/lib/ruby/gems/1.8/gems/mongrel_cluster-0.2.1/lib/mongrel_cluster/recipes.rb
  * executing task deploy
  * executing task update
 ** transaction: start
  * executing task update_code
  * querying latest revision...
svn: invalid option: --limit
Type 'svn help' for usage.
*** [update_code] transaction: rollback
  * [update_code] rolling back
  * executing "rm -rf
/path/to/my/application/prod/releases/20061121153539"
    servers: ["myapplication.com"]
Password: xxxxxxxx
    [myapplication.com] executing command
    command finished
rake aborted!
Could not determine latest revision

Mazette de mazette! Vous voyez quelque chose qui pourrait clocher? :\

Michael

Michael :

subversion". Je devrais procéder autrement?
Donc l’option --limit n’existe pas sous svn 1.1.4

2 possibilités :

1/ Compiler un svn 1.4.2

2/ Patcher Kaspitranoutche ( © Underflow_ :slight_smile: pour éviter qu’il
n’utilise --limit quand il fait son svn log…
(genre svn log -q … | head -3)

– Jean-François.

Si tout est sur la même machine l’interêt de Capistrano est limité au
simple apprentissage, cependant je te conseil de faire comme ceci :

Déjà diviser ton espace de travail en 2 (+1)
a. production
b. dev
(c. ) repertoire actuel (qui ne servira plus, ou alors pour des
simples backups … quoi qu’avec SVN normalement… :wink:

  • Créer le repos (svnadmin create /home/svn/monapp)
  • Faire un import de “c.” dans le nouveau repos
  • Créer “b.” (où tu veux), ce sont ces fichiers que tu modifiera pour ton dev
    :wink:
  • Faire un checkout du repos dans “b.” (tu as donc une copie de
    travail … svn info pour être sur)
  • (re-)Configurer Capistrano (en lui spécifiant “a.” comme repetoire
    pour l’application finale) / Faire les modifs necessaires… + commit
    eventuel.
  • Deployer + Croiser les doigts :wink:

PS: J’éspere n’avoir rien oublié comme étape !

spam
Grrr, pas pris le temps de me relire … désolé pour les fautes (et
pour les yeux :’( )
/spam

Voilà ça fonctionne enfin, depuis hier :slight_smile:
Il a fallu que je compile et installe subversion 1.4.2. Maintenant c’est
nickel.

Maintenant je passe au passage d’Apache2 Ã Apache2.2 pour avoir le
module proxy_balancer… Allez, c’est reparti…

Merci pour votre aide, toujours top!

Michael

Julien ALEXANDRE a écrit :

cf mon premier message (ou pas loin :wink: )

“The :repository variable is the location of the (subversion, in this
case) repository that stores our code. (Note that, for subversion, you
cannot use file:// repositories with Capistrano.)”

http://manuals.rubyonrails.com/read/chapter/98

:slight_smile:

il faut que ton serveur SVN soient lancé !

deux solutions, utilisé le serveur on va dire en “global” (j’ai oublié
les commandes pour ta distrib) soient le lancé de façon “spécifique”
comme ceci :

“svnserve -d -r /home/svn”

tu devrais avoir acces a ton repos comme ceci svn://localhost/myapp ,
essaye un svn co svn://localhost/myapp. tant que ceci ne fonctionnera
pas, capistrano ne fonctionnera pas non plus.