Для Ruby on Rails есть ли способ распечатать имя веб-сервера (например, apache), возможно, с помощью Rack? - PullRequest
1 голос
/ 14 марта 2011

Если я запускаю приложение Rails 2 или Rails 3, есть ли способ распечатать имя веб-сервера на странице (например, /foos/index) ... или если Rails не знает, что сервер есть, может Rack это сделать?

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Почему вы хотите это сделать?

Одной из распространенных причин является отладка - если у одного сервера возникла проблема, было бы неплохо узнать, какой сервер.

Лучший способдля облегчения отладки стоит включить пользовательский заголовок с именем сервера.Вы можете написать простое промежуточное программное обеспечение Rack, которое сделает это.

# lib/rack/server_name_header.rb
module Rack
  class ServerNameHeader
    attr_reader :app, :hostname
    def initialize(app)
      @app = app
      @hostname = `hostname`
    end
    def call(env)
      status, headers, body = *app.call(env)
      headers['X-Server-Name'] = hostname
      [status, headers, body]
    end
  end
end

# config/environments/production.rb
require File.expand_path('../../../lib/rack/server_name_header', __FILE__)
My::Application.configure do
  config.middleware.use Rack::ServerNameHeader
  # all the other stuff
end
1 голос
/ 14 марта 2011

В среде CGI переменная SERVER_SOFTWARE содержит имя веб-сервера (и его версию, если веб-сервер не настроен для исключения этого).

Для Rails вы можете использовать ENV['SERVER_SOFTWARE'] в любом месте, чтобы получить имя веб-сервера.

Для приложений Rack вы можете использовать env['SERVER_SOFTWARE'], где доступно env.

...