2011-01-31 3 views
13

Eseguo il thin webserver per praticamente ogni app nei miei ambienti di sviluppo/test. Quando ho usato Mongrel con Rails 2.x, tutto quello che dovevo digitare era script/server per far funzionare il server web che ho scelto. Ma con Rails 3, devo specificare Thin ogni volta. C'è un modo per ottenere Thin in esecuzione sulle mie app Rails semplicemente digitando rails s anziché rails s thin?C'è un modo in cui Rails 3.0.x può impostare l'utilizzo di Thin?

risposta

0

Basta installare thin, cd nella directory in cui si trova l'app ed eseguire il thin start. Funziona perfettamente qui. :)

È possibile utilizzare http://www.softiesonrails.com/2008/4/27/using-thin-instead-of-mongrel per modificare secondo necessità. (È quello che ho usato)

+1

Come aggiornamento, thin -V start lavora per simulare il comportamento che si vede di solito quando si avvia il server di rotaie, ovvero dove si vede l'output nel terminale da ciascuna connessione. – ddd

+2

è bello. ma non c'è nulla che renda 'rails s' run' thin start'? – tubbo

21

Sì, è possibile farlo.

Il modo in cui il comando rails s funziona alla fine della giornata è passando a Rack e lasciandolo selezionare il server. Di default il gestore Rack proverà a usare mongrel e se non riesce a trovare bastardo andrà con webrick. Tutto ciò che dobbiamo fare è applicare un po 'di patch al gestore. Dovremo inserire la nostra patch nello script rails. Ecco cosa fai, apri il tuo file script/rails. Per impostazione predefinita, dovrebbe assomigliare a questa:

#!/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' 

inseriamo il nostro diritto di patch prima della linea require 'rails/commands'. Il nostro nuovo file dovrebbe essere simile a questo:

#!/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' 

Avviso che sarà ora cercare Mongrel e se c'è un errore provare per sottile e solo allora andare con WEBrick. Ora quando digiti rails s otteniamo il comportamento che stiamo cercando.

1

In script/rails le seguenti opere così:

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'