I’d like to set up capistrano to send an email whenever we do a
deployment. Just start an SMTP session with localhost and shoot off
the email. I have all the code to do that actually, I just don’t know
how to run some Ruby code on the deployment server. Anyone know how
to do that, or do you have an email recipe?
Pat
On Mar 4, 2007, at 4:52 PM, Pat M. wrote:
I’d like to set up capistrano to send an email whenever we do a
deployment. Just start an SMTP session with localhost and shoot off
the email. I have all the code to do that actually, I just don’t know
how to run some Ruby code on the deployment server. Anyone know how
to do that, or do you have an email recipe?
Pat
Hey Pat-
Here is a method you can use to run ruby code on the remote server:
def ruby(cmd, options={}, &block)
temp_name = random_string + “.rb”
begin
put(cmd, temp_name, :mode => 0700)
send(run_method, “ruby #{temp_name}”, options, &block)
ensure
delete temp_name
end
end
then in a recipe:
task :foo do
ruby “puts ‘hello world!’”
ruby <<-RUBY
1.upto(10).do |i|
pust i
end
RUBY
end
Cheers-
– Ezra Z.
– Lead Rails Evangelist
– [email protected]
– Engine Y., Serious Rails Hosting
– (866) 518-YARD (9273)
On 3/4/07, Ezra Z. [email protected] wrote:
put(cmd, temp_name, :mode => 0700)
ruby "puts 'hello world!'"
– [email protected]
– Engine Y., Serious Rails Hosting
– (866) 518-YARD (9273)
Cool, thanks, that worked. Until I needed to load up some stuff from
the rails environment. Decided to use ActionMailer instead of just
doing the SMTP connection. Anyway, I created a cap plugin:
module CapistranoRunner
def runner(cmd)
run “#{release_path}/script/runner "#{cmd}" -e production”
end
end
Capistrano.plugin :runner, CapistranoRunner
and then to use it it looks like
task :after_deploy do
runner.runner “CapistranoMailer.deliver_deploy(:revision =>
#{revision})”
cleanup
end
Pat