2011-01-31 2 views
13

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

ответ

0

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

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

+1

В качестве обновления тонкий запуск -V работает, чтобы имитировать поведение, которое вы обычно видите при запуске сервера рельсов, а также где вы видите вывод в терминале от каждого соединения. – ddd

+2

это круто. но нет ничего, что заставляет 'rails s' запускать« тонкий старт »? – tubbo

21

Да, это возможно.

Способ, которым команда rails s работает в конце дня, попадает в стойку и позволяет выбрать сервер. По умолчанию обработчик Rack попытается использовать mongrel, и если он не сможет найти монгрел, он пойдет с webrick. Все, что нам нужно сделать, это немного исправить обработчик. Нам нужно будет вставить наш патч в скрипт rails. Вот что вы делаете, взломайте файл 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' 

Обратите внимание, что он теперь будет пытаться Барбос и если есть ошибка попробовать для тонких и только потом пойти с WEBrick. Теперь, когда вы введете rails s, мы получим поведение, которое нам нужно.

1

В 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'