mongrel_rails - программно сообщать, на каком порту он работает
На моей местной машине я бегу по рельсам с дворнягой. У меня есть некоторые вещи, которые запускаются при запуске, через файл в config/initializers, который использует puts
сказать мне, какую базу данных она использует, что используется для отправки электронных писем, и несколько других битов информации.
Когда я запускаю кластер дворняжек на портах 3000, 3001 и 3002, я хочу делать это только для отчетов с монгрелом на порте 3000. Поэтому мне нужно обернуть его в if
блок, который проверяет, какой порт использует текущий запущенный монгрел. Может кто-нибудь сказать мне, как я могу получить это в моем коде?
3 ответа
В инициализаторе,
puts Rails::Server.new.options[:Port]
можете сообщить свой порт.
Это работает в 2.2.2?
class SomeController < ApplicationController
def index
@port = request.port
end
end
Хорошо, я отвечаю на свой собственный вопрос, так как я только что понял это после назначения награды!
Я могу получить pid текущего запущенного процесса с Process.pid
, Тогда я могу сделать ps afx | grep mongrel
что дает мне такой результат
pid port
| |
V V
10761 pts/1 S 0:20 | \_/usr/local/bin/ruby /path/to/mongrel_rails start -p 3000
10762 pts/1 S 0:18 | \_/usr/local/bin/ruby /path/to/mongrel_rails start -p 3001
10763 pts/1 S+ 0:23 | \_/usr/local/bin/ruby /path/to/mongrel_rails start -p 3002
который я могу затем grep для pid, и читать номер порта из соответствующей строки, и посмотреть, если это 3000.
Итак, мой код
if `ps afx | grep mongrel_rails`.split("\n").detect{|line| line =~ /^#{Process.pid}.+\-p\s3000/}
#this is a mongrel running on port 3000 - do the extra stuff
....
end
Кстати, если кто-то может сказать мне, как напрямую получить порт бегущей дворняги, не проходя через ps afx
а также Process.pid
я все еще дам тебе награду:)