有没有办法Rails 3.0.x可以默认使用Thin?

时间:2011-01-31 16:33:27

标签: ruby-on-rails ruby thin

我在开发/测试环境中基本上为每个应用运行Thin Web服务器。当我使用Mongrel和Rails 2.x时,我只需输入script/server即可运行我选择的网络服务器。但是使用Rails 3,我每次都必须指定Thin。有没有办法只需输入rails s而不是rails s thin就可以在我的Rails应用上运行精简版?

4 个答案:

答案 0 :(得分:21)

是的,可以这样做。

rails s命令在一天结束时的工作方式是掉到Rack并让它选择服务器。默认情况下,Rack处理程序将尝试使用mongrel,如果找不到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'

请注意,它现在将尝试使用Mongrel,如果出现错误,请尝试使用Thin,然后再使用Webrick。现在当您输入rails s时,我们会得到我们正在追求的行为。

答案 1 :(得分:10)

从Rails 3.2rc2开始,当你的Gemfile中有rails server时,默认情况下会在调用gem 'thin'时运行thin!感谢此拉取请求:https://github.com/rack/rack/commit/b487f02b13f42c5933aa42193ed4e1c0b90382d7

非常适合我。

答案 2 :(得分: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'

答案 3 :(得分:0)

只需将thin,cd安装到您的应用所在的目录并运行thin start。在这里完美运作。 :)

您可以根据需要使用http://www.softiesonrails.com/2008/4/27/using-thin-instead-of-mongrel进行更改。 (它是我用过的那个)