[Rails] App to Pick up application release from Git/Capistrano?

5 views
Skip to first unread message

Owain

unread,
Apr 22, 2010, 12:00:09 PM4/22/10
to Ruby on Rails: Talk
My application is going into user testing and I would like to see
which "release" the user has been testing against by the release
appearing somewhere on the view. I can then check it on screen prints
etc.

I am using Git and Capistrano in a multi-stage environment.

I expect I could access the capistrano release name from the
filesystem directory somehow. Any clever way of doing this in the
application controller?

Even better would be to somehow get Capistrano to capture the SHA
(e.g. 1837213156f56b850e9045622d5c2f4a1607ef53) that it is checking
out and placing that somewhere where I can read. That way I can track
any errors based on the Git release. Perhaps just displaying the
first 4 digits would be enough. Has anyone done this somehow?

Any other ideas?

O.


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

Peter De Berdt

unread,
Apr 22, 2010, 1:02:26 PM4/22/10
to rubyonra...@googlegroups.com

On 22 Apr 2010, at 18:00, Owain wrote:

My application is going into user testing and I would like to see
which "release" the user has been testing against by the release
appearing somewhere on the view.  I can then check it on screen prints
etc.

I am using Git and Capistrano in a multi-stage environment.

I expect I could access the capistrano release name from the
filesystem directory somehow.  Any clever way of doing this in the
application controller?

Even better would be to somehow get Capistrano to capture the SHA
(e.g. 1837213156f56b850e9045622d5c2f4a1607ef53) that it is checking
out and placing that somewhere where I can read.  That way I can track
any errors based on the Git release.  Perhaps just displaying the
first 4 digits would be enough.  Has anyone done this somehow?

>> p = `cd #{RAILS_ROOT} && git rev-parse HEAD`.strip
=> "031154343573f846dc4f9d31806e58438bfe783e"
>> q = `cd #{RAILS_ROOT} && git show-ref`.strip
=> "031154343573f846dc4f9d31806e58438bfe783e refs/heads/master"

Would be best if you store the result in a constant at startup, so the IO operation isn't called on every page.

Hope this helps.


Best regards


Peter De Berdt


Rob Biedenharn

unread,
Apr 22, 2010, 2:02:59 PM4/22/10
to rubyonra...@googlegroups.com
On Apr 22, 2010, at 1:02 PM, Peter De Berdt wrote:
On 22 Apr 2010, at 18:00, Owain wrote:
My application is going into user testing and I would like to see
which "release" the user has been testing against by the release
appearing somewhere on the view.  I can then check it on screen prints
etc.

I am using Git and Capistrano in a multi-stage environment.

I expect I could access the capistrano release name from the
filesystem directory somehow.  Any clever way of doing this in the
application controller?

Even better would be to somehow get Capistrano to capture the SHA
(e.g. 1837213156f56b850e9045622d5c2f4a1607ef53) that it is checking
out and placing that somewhere where I can read.  That way I can track
any errors based on the Git release.  Perhaps just displaying the
first 4 digits would be enough.  Has anyone done this somehow?

>> p = `cd #{RAILS_ROOT} && git rev-parse HEAD`.strip
=> "031154343573f846dc4f9d31806e58438bfe783e"
>> q = `cd #{RAILS_ROOT} && git show-ref`.strip
=> "031154343573f846dc4f9d31806e58438bfe783e refs/heads/master"

Would be best if you store the result in a constant at startup, so the IO operation isn't called on every page.

Hope this helps.

Best regards

Peter De Berdt

You can always use the contents of the REVISION file that cap puts in your Rails.root directory

File.read(File.expand_path('REVISION', RAILS_ROOT))

-Rob


Peter De Berdt

unread,
Apr 22, 2010, 6:38:32 PM4/22/10
to rubyonra...@googlegroups.com

On 22 Apr 2010, at 20:02, Rob Biedenharn wrote:

>> p = `cd #{RAILS_ROOT} && git rev-parse HEAD`.strip
=> "031154343573f846dc4f9d31806e58438bfe783e"
>> q = `cd #{RAILS_ROOT} && git show-ref`.strip
=> "031154343573f846dc4f9d31806e58438bfe783e refs/heads/master"

Would be best if you store the result in a constant at startup, so the IO operation isn't called on every page.

Hope this helps.

Best regards

Peter De Berdt

You can always use the contents of the REVISION file that cap puts in your Rails.root directory

File.read(File.expand_path('REVISION', RAILS_ROOT))

Ah indeed, totally forgot about that one.


Best regards


Peter De Berdt


Owain

unread,
Apr 23, 2010, 3:02:32 AM4/23/10
to Ruby on Rails: Talk
Thanks Peter and Rob.

I think it would still make sense to do this during initialization
rather than at the application controller since it is during
initialization is then it will change. I will also add some logic to
the view just to check REVISION is there, perhaps in future the app
might not be deployed using Cap. Sounds like a little helper.

O.

Owain

unread,
Apr 26, 2010, 5:33:03 AM4/26/10
to Ruby on Rails: Talk
so here it is my solution;

/app/config/initializers/revision.rb
filename = File.expand_path('REVISION', RAILS_ROOT)
REVISION = File.exist?(filename) ? File.read(filename) : `cd
#{RAILS_ROOT} && git rev-parse HEAD`.strip

/app/views/layout/application.html.erb
<%- unless production? %>
<p id='revision'><%= "#{REVISION[0..3]} #{Time.now.to_s(:db)} "%></
p>
<%- end -%>

/app/helpers/application_helper.rb
def production?
@is_production ||=(ENV['RAILS_ENV']=='production')
end

/public/stylesheets/content.css
#revision {
color: gray;
position: absolute;
z-index: 9;
top: 10px;
left: 0px;
Reply all
Reply to author
Forward
0 new messages