2009-06-26 7 views
17

Quale sarebbe il modo migliore per la versione di un'applicazione di rotaie? Vogliamo iniziare a entrare in cicli di test più strutturati e avere una versione di set per build è una parte di questo. Usiamo la sovversione ma vorrei evitare di usare i numeri di revisione per le versioni. C'è un modo semplice per farlo automaticamente? O dovrei semplicemente definire un metodo app_version nell'helper dell'applicazione?Il modo migliore per la versione di un'app per rails?

(Stiamo utilizzando la sovversione per il controllo di origine)

+0

Esiste un collegamento a tutti tra il numero di versione e la sovversione? Ad esempio, crei un tag o un ramo per ogni versione? In tal caso, puoi utilizzare la mia soluzione di seguito con la parola chiave $ URL $ che, a seconda dello schema, si espanderà a http: //mysubversionserver/tags/v3.0. È quindi possibile analizzare facilmente la "v3.0", ad es. version.split ('http: // mysubversionserver/tags /') [1] – ideasasylum

risposta

4

È possibile utilizzare subversion keywords:

In sostanza, si potrebbe avere un metodo di supporto ...

def app_version 
    "$Id$" 
end 

$Id$ è una parola chiave che svn espanderà (il link qui sopra ha altri si può usare). Ora, abbiamo impostato la proprietà parole chiave su quel file per far svn sanno che va a sostituire le parole chiave (supponiamo application_helper.rb):

svn propset svn:keywords "Id" application_helper.rb 
svn ci application_helper.rb 

Ora, se si guarda application_helper.rb si leggerà (qualcosa di simile questo, con la versione, la data, il nome utente cambiato)

def app_version 
    "$Id: application_helper.rb 282 2009-06-26 10:34:17Z root $" 
end 

Ovviamente, è possibile assegnare ad un variabile e analizzarlo nel formato richiesto, inclusi nei tuoi modelli di vista e simili o fare la stessa cosa, ma invece di application_helper.rb, basta usare un file chiamato VERSION nella directory principale.

+0

Venerato. Sono venuto qui per dire proprio questo. – user60401

+0

$ 1 se "$ Revisione $" corrisponde (/ Revisione: (\ d +) /) ... Se si aggiunge "Revisione" a svn: parole chiave, questo verrà aggiornato con ogni revisione SVN (non solo quando il file corrente viene aggiornato) e analizzerà solo la revisione. – nertzy

3

Il plugin app-versione (http://github.com/toland/app_version/tree/master) consente di specificare i vari componenti di una versione dell'applicazione. Potresti quindi includere la revisione di subversion come componente della build senza che sia la parte dominante.

Si potrebbe anche, come parte del flusso di lavoro di build/test, incrementare un altro componente della versione.

0

Penso che questo dovrebbe essere la responsabilità del sistema di controllo sorgente. Userei un tag per ogni versione, quindi è possibile creare un metodo di supporto che scrive solo il tag nella tua app (ad esempio, nel piè di pagina):

def put_version 
    "<p id='version'>#{$$TAG_NAME}</p>" 
end 

non riesce a ricordare la sintassi per l'inserimento del nome del tag.

2

Si potrebbe o versione etichettando la filiale git/svn ... o, meglio, una costante nel file di ambiente, proprio come fa Rails:

MY_APP_VER = 0.1 

Perché dovresti usare l'helper applicazione? Puoi sempre ottenere quella variabile dal tuo helper dell'applicazione se dovessi visualizzarla sullo schermo. Ma sembra stupido che la logica appartenga alla configurazione dell'intera applicazione all'interno di un metodo di supporto.

21

Se si utilizza git, è possibile creare una variabile statica nel file environment.rb che estrae il nome del tag corrente da git. Se stai usando qualcosa come git flow, questo funziona benissimo.

Aggiungi al environment.rb:

APP_VERSION = `git describe --always` unless defined? APP_VERSION 

Ora è possibile <%= APP_VERSION %> nel vostro punto di vista. N.B. che questo non funziona su Heroku.

Fonte: http://blog.danielpietzsch.com/post/1209091430/show-the-version-number-of-your-rails-app-using-git

+0

Definirlo in environment.rb non funziona in Rails 2.3.14. Suggerisco di aggiungere un helper al tuo application_helper.rb. Inoltre, preferisco l'output di 'git describe --always --tags'. Quindi ottieni i numeri di versione. Ma la tua risposta mi ha portato lì. :) –