2011-01-31 7 views
13

Ejecuto el servidor web Thin para básicamente cada aplicación en mis entornos de desarrollo/prueba. Cuando utilicé Mongrel con Rails 2.x, todo lo que tuve que escribir fue script/server para que ejecutara el servidor web que yo elija. Pero con Rails 3, debo especificar Thin cada vez. ¿Hay alguna forma de que Thin funcione en mis aplicaciones de Rails simplemente escribiendo rails s en lugar de rails s thin?¿Existe alguna manera de que Rails 3.0.x pueda usar de forma predeterminada Thin?

Respuesta

0

Simplemente instale thin, cd en el directorio donde se encuentra su aplicación y ejecute thin thin. Funciona perfectamente aquí. :)

Puede usar http://www.softiesonrails.com/2008/4/27/using-thin-instead-of-mongrel para cambiar según sea necesario. (Es el que yo usé)

+1

Como una actualización, el inicio delgado -V funciona para imitar el comportamiento que generalmente se ve al iniciar el servidor de rieles, también conocido como donde se ve la salida en el terminal de cada conexión. – ddd

+2

eso es genial. pero no hay nada que haga que 'rails s' ejecute' thin start'? – tubbo

21

Sí, es posible hacer esto.

La manera en que funciona el comando rails s al final del día es cayendo a Rack y permitiéndole elegir el servidor. De forma predeterminada, el controlador de Rack intentará usar mongrel y si no puede encontrar mongrel, irá con webrick. Todo lo que tenemos que hacer es parchar el controlador ligeramente. Tendremos que insertar nuestro parche en el script rails. Esto es lo que debes hacer, abre tu archivo script/rails. Por defecto se debe tener este aspecto:

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

insertamos nuestro derecho parche antes de la línea de require 'rails/commands'. Nuestro nuevo archivo debe tener este aspecto:

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

en cuenta que ahora intentará Mestizo y si hay un error tratar de Delgado y sólo entonces ir con WEBrick. Ahora cuando escribe rails s obtenemos el comportamiento que buscamos.

1

En script/rails las siguientes obras, así:

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' 
Cuestiones relacionadas