开发者

Running a ssh tunnel from a rails/passenger server to another machine

I have a Rails (2.3.8) application that will need to start and maintain a SSH tunnel whenever the application is started using 'script/server' or when started using Passenger. When script/server is ^C'd or the Passenger instance is shu开发者_如何学Got down the SSH tunnel should be destroyed.

I do not want the tunnel to be started when I run 'script/console' - so using config/environment.rb doesn't look like a good option.

As such, I don't want the tunnel to be backgrounded - I want it to be attached and owned by the ruby process, and I only want one tunnel per server.

The tunnel itself will most likely be started by running SSH directly, but if there's a simple way to do it using the SSH libraries I'll use that instead.

Is there a way to do this in Rails? I can think of a way to do it using config/environment.rb using a series of lock files and other bits of messing around, but I was hoping for some sort of :on_server_start and :on_server_exit hook.

--

For the curious, I need to do this as the Rails application is running in location A and will receive updates from a series of services in location B. Location B, however, does not have a direct route to location A. I will be starting a SSH tunnel from the application to a machine in location B and the services in location B will send updates to that machine instead.


Managed to solve this one using config/environments/*.rb and a quick fork hack. See gist: http://gist.github.com/466267

So, it'll be run if you use RAILS_ENV=production but not for test/development.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜