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 я все еще дам тебе награду:)

Другие вопросы по тегам