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
Come di Rails 3.2rc2, sottile è ora gestito per default su invocando rails server
quando gem 'thin'
è nel vostro Gemfile! Grazie a questa richiesta pull: https://github.com/rack/rack/commit/b487f02b13f42c5933aa42193ed4e1c0b90382d7
Funziona alla grande per me.
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)
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.
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'
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
è bello. ma non c'è nulla che renda 'rails s' run' thin start'? – tubbo