Приложение Rails 3, Как получить версию GIT и обновить сайт? - PullRequest
9 голосов
/ 02 декабря 2010

Я развертываю свое приложение rails 3 с использованием capistrano, и я хочу получить версию git (и информацию о дате) и обновить нижний колонтитул моего сайта с помощью этого.

Как я могу это сделать?

Ответы [ 4 ]

9 голосов
/ 05 апреля 2011

Исходя из указаний Дэвида, я решил эту проблему, создав инициализатор "git_info.rb".Поместите этот файл в каталог инициализаторов Rails

Содержимое git_info.rb:

GIT_BRANCH = `git status | sed -n 1p`.split(" ").last
GIT_COMMIT = `git log | sed -n 1p`.split(" ").last

Затем в нижнем колонтитуле вы можете использовать этот вывод (синтаксис HAML):

#rev_info
  = "branch: #{GIT_BRANCH} | commit: #{GIT_COMMIT}"

Возможно, вы захотите установить цвет шрифта #rev_info таким же, как цвет фона, поэтому текст будет виден только тогда, когда вы выделите его курсором.

Я только что попробовал это, ихотя он работает в режиме разработки, создается впечатление, что ветка перезаписывается с помощью "deploy" после развертывания capistrano.Capistrano должен создавать свою собственную локальную ветвь, которая называется "deploy" при развертывании?

8 голосов
/ 15 февраля 2013

Для людей, которые не используют капистрано, красивее:

В config / initializers / git_info.rb:

GIT_BRANCH = `git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3`
GIT_COMMIT = `git log --pretty=format:'%h' -n 1`
GIT_COMMIT_TIMESTAMP = `git log --pretty=format:'%ct' -n 1`

Второй дает ша в более красивой форме (например: 4df21c0).

Третий возвращает UNIX TIMESTAMP, который я форматирую позже, используя Time / DateTime.

2 голосов
/ 17 октября 2016

Часто человек развертывается не в репозитории git, а в выпуске, который не содержит никакой информации о репозитории:

Capistrano хранит файл редакции при каждом успешном развертывании, который является git commit sha . Этот файл называется REVISION и находится в корне каталога развертывания.

В config / initializer вашего Rails-приложения создайте файл: deploy_version.rb с чем-то вроде:

if File.exists?('REVISION')
  APP_REVISION = `cat REVISION`
else
  APP_REVISION = 'unknown'
end

Или, если вы уверены, что вне развертывания, всегда есть git-репозиторий, который можно заменить последним назначением

if File.exists?('REVISION')
  APP_REVISION = `cat REVISION`
else
  APP_REVISION = `git describe --abbrev=6 --always --tags.`
end
0 голосов
/ 02 декабря 2010

Давным-давно я сделал это для subversion :
, в инициализаторе я поставил глобальный

SVN_REVISION = `svn info | ruby -ne 'puts $1 if $_ =~ /^Revision: ([0-9]*)/'`

и в макете приложения:

<div id='site_footer'>
  ...
  <% unless SVN_REVISION.blank? -%>
  <p id='version'>
    v<%= SVN_REVISION %>
  </p>
  <% end -%>
</div>

с git вы можете изменить глобал на что-то вроде:

git log -1 | ruby -ne 'puts $1 if $_ =~ %r{^Date:   (.+) \+\d+$}'

Теперь подумав, может быть лучше:

  • capistrano создаетфайл конфигурации (config / git_status.yml)
  • инициализаторы анализируют конфигурацию и устанавливают переменные

Я не уверен, это всего лишь идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...