13

開発/テスト環境では、基本的にすべてのアプリに対して Thin Web サーバーを実行しています。Rails 2.x で Mongrel を使用したとき、入力する必要があっscript/serverたのは、選択した Web サーバーを実行させることだけでした。しかし Rails 3 では、毎回 Thin を指定する必要があります。rails sの代わりに入力するだけで、Rails アプリで Thin を実行する方法はありますrails s thinか?

4

4 に答える 4

21

ええ、これを行うことは可能です。

rails sコマンドが 1 日の終わりに機能する方法は、 Rack にフォールスルーしてサーバーを選択させることです。デフォルトでは、Rack ハンドラーは使用を試み、mongrelmongrel が見つからない場合は を使用し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すると、目的の動作が得られます。

于 2011-08-13T08:52:24.890 に答える
10

Rails 3.2rc2 の時点で、Gemfile 内の を呼び出すと、デフォルトで thin が実行されるrails serverようgem 'thin'になりました! このプルリクエストに感謝します: https://github.com/rack/rack/commit/b487f02b13f42c5933aa42193ed4e1c0b90382d7

私にとってはうまくいきます。

于 2012-03-02T18:08:42.717 に答える
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'
于 2012-02-13T15:15:44.720 に答える
0

アプリがあるディレクトリにシン cd をインストールし、シン スタートを実行するだけです。ここで完璧に動作します。:)

http://www.softiesonrails.com/2008/4/27/using-thin-instead-of-mongrelを使用して、必要に応じて変更できます。(私が使っていたものです)

于 2011-01-31T18:29:33.967 に答える