Я запускаю тонкий веб-сервер для практически каждого приложения в своих тестовых средах. Когда я использовал Mongrel с Rails 2.x, все, что мне нужно было напечатать, было script/server
, чтобы заставить его запустить веб-сервер, который я выбираю. Но с Rails 3 я должен каждый раз указывать Thin. Есть ли способ заставить Thin работать в моих приложениях Rails, просто набрав rails s
вместо rails s thin
?Есть ли способ Rails 3.0.x по умолчанию использовать Thin?
ответ
По Rails 3.2rc2, тонкий теперь по умолчанию запускается на вызов rails server
когда gem 'thin'
в вашем Gemfile! Благодаря такому запросу: https://github.com/rack/rack/commit/b487f02b13f42c5933aa42193ed4e1c0b90382d7
Отлично подходит для меня.
Просто установите тонкий компакт-диск в каталог, в котором находится ваше приложение, и запускайте тонкий старт. Здесь отлично работает. :)
Вы можете использовать http://www.softiesonrails.com/2008/4/27/using-thin-instead-of-mongrel, чтобы изменить при необходимости. (Это тот, который я использовал)
Да, это возможно.
Способ, которым команда 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
, мы получим поведение, которое нам нужно.
В 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'
В качестве обновления тонкий запуск -V работает, чтобы имитировать поведение, которое вы обычно видите при запуске сервера рельсов, а также где вы видите вывод в терминале от каждого соединения. – ddd
это круто. но нет ничего, что заставляет 'rails s' запускать« тонкий старт »? – tubbo