Лучший способ для версии приложения для рельсов?
Каким будет лучший вариант для версии приложения rails? Мы хотим начать работать с более структурированными циклами тестирования, а также иметь установленную версию для каждой сборки. Мы используем subversion, но я бы хотел избежать использования номеров версий для версий. Есть ли простой способ сделать это автоматически? Или я должен просто определить метод app_version в помощнике приложения?
(Мы используем подрывную функцию для управления источником)
Ответы
Ответ 1
Вы можете использовать ключевые слова subversion:
По существу, у вас может быть вспомогательный метод...
def app_version
"$Id$"
end
$Id$
- это ключевое слово, которое svn будет расширяться (ссылка выше содержит другие, которые вы могли бы использовать). Теперь мы устанавливаем свойство keywords в этом файле, чтобы svn знал, что он должен заменять ключевые слова (допустим application_helper.rb):
svn propset svn:keywords "Id" application_helper.rb
svn ci application_helper.rb
Теперь, если вы посмотрите на application_helper.rb, он будет читать (что-то вроде этого, с измененной версией, датой, именем пользователя)
def app_version
"$Id: application_helper.rb 282 2009-06-26 10:34:17Z root $"
end
Очевидно, вы можете назначить эту переменную и проанализировать ее в нужном формате, включить ее в свои шаблоны просмотра и т.д. Или сделать то же самое, но вместо application_helper.rb просто использовать файл с именем VERSION
в своем корневой каталог.
Ответ 2
Если вы используете git
, вы можете создать статическую переменную в вашем файле environment.rb
, который вытаскивает текущее имя тега из git. Если вы используете что-то вроде git flow, это отлично работает.
Добавить в environment.rb
:
APP_VERSION = `git describe --always` unless defined? APP_VERSION
Теперь вы можете <%= APP_VERSION %>
в своих представлениях. Нотабене что это не работает на Героку.
Источник: http://blog.danielpietzsch.com/post/1209091430/show-the-version-number-of-your-rails-app-using-git
Ответ 3
Плагин app-version (http://github.com/toland/app_version/tree/master) позволяет указать различные компоненты версии приложения. Затем вы можете включить ревизию subversion в качестве компонента сборки без ее доминирующей части.
Вы также можете, как часть рабочего процесса сборки/тестирования, увеличить еще один компонент версии.
Ответ 4
Вы можете либо с помощью маркировки вашей ветки git/svn... или, наилучшим образом, константы в файле среды, как это делает Rails:
MY_APP_VER = 0.1
Зачем вам использовать помощник приложения? Вы всегда можете получить эту переменную от своего помощника приложения, если вам нужно отобразить ее на экране. Но, кажется, глупо иметь логику, относящуюся к конфигурации вашего всего приложения внутри вспомогательного метода.
Ответ 5
Я считаю, что это должно быть ответственностью вашей системы управления версиями. Я бы использовал тег для каждой версии, тогда вы можете создать вспомогательный метод, который просто записывает тэг в ваше приложение (скажем, в нижнем колонтитуле):
def put_version
"<p id='version'>#{$$TAG_NAME}</p>"
end
Невозможно запомнить синтаксис для вставки имени тега.