Есть ли способ, которым Rails 3.0.x может по умолчанию использовать Thin?

Я запускаю тонкий веб-сервер для практически каждого приложения в своих тестовых средах. Когда я использовал Mongrel с Rails 2.x, все, что мне нужно было напечатать, было script/server, чтобы заставить его запустить веб-сервер, который я выбираю. Но с Rails 3 я должен каждый раз указывать Thin. Есть ли способ заставить Thin работать в моих приложениях Rails, просто набрав rails s вместо rails s thin?

Ответы

Ответ 2

Да, это возможно сделать.

Способ, которым команда rails s работает в конце дня, - это провалиться в стойку и позволить ей выбрать сервер. По умолчанию обработчик Rack попытается использовать mongrel, и если он не сможет найти mongrel, он пойдет с webrick. Все, что нам нужно сделать, это немного исправить обработчик. Нам нужно вставить наш патч в rails script. Вот что вы делаете, распакуйте файл script/rails. По умолчанию он должен выглядеть следующим образом:

#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)
require 'rails/commands'

Мы вставляем наш патч прямо перед строкой require 'rails/commands'. Наш новый файл должен выглядеть так:

#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)
require 'rack/handler'
Rack::Handler.class_eval do
  def self.default(options = {})
    # Guess.
    if ENV.include?("PHP_FCGI_CHILDREN")
      # We already speak FastCGI
      options.delete :File
      options.delete :Port

      Rack::Handler::FastCGI
    elsif ENV.include?("REQUEST_METHOD")
      Rack::Handler::CGI
    else
      begin
        Rack::Handler::Mongrel
      rescue LoadError
        begin
          Rack::Handler::Thin
        rescue LoadError
          Rack::Handler::WEBrick
        end
      end
    end
  end
end
require 'rails/commands'

Обратите внимание, что теперь он попробует Mongrel, и если есть ошибка, попробуйте Thin и только затем перейдите с Webrick. Теперь, когда вы набираете rails s, мы получаем поведение, которое мы выполняем после.

Ответ 3

В script/rails также работает следующее:

APP_PATH = File.expand_path('../../config/application',  __FILE__)
require File.expand_path('../../config/boot',  __FILE__)

require 'rack/handler'
Rack::Handler::WEBrick = Rack::Handler::Thin

require 'rails/commands'

Ответ 4

Просто установите тонкий компакт-диск в каталог, в котором находится ваше приложение, и запускайте тонкий старт. Здесь отлично работает.:)

Вы можете использовать http://www.softiesonrails.com/2008/4/27/using-thin-instead-of-mongrel для изменения по мере необходимости. (Это тот, который я использовал)