Есть ли способ, которым Rails 3.0.x может по умолчанию использовать Thin?
Я запускаю тонкий веб-сервер для практически каждого приложения в своих тестовых средах. Когда я использовал Mongrel с Rails 2.x, все, что мне нужно было напечатать, было script/server
, чтобы заставить его запустить веб-сервер, который я выбираю. Но с Rails 3 я должен каждый раз указывать Thin. Есть ли способ заставить Thin работать в моих приложениях Rails, просто набрав rails s
вместо rails s thin
?
Ответы
Ответ 1
По Rails 3.2rc2 тонкий теперь запускается по умолчанию при вызове rails server
, когда gem 'thin'
находится в вашем Gemfile! Благодаря этому запросу: https://github.com/rack/rack/commit/b487f02b13f42c5933aa42193ed4e1c0b90382d7
Отлично работает для меня.
Ответ 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 для изменения по мере необходимости. (Это тот, который я использовал)