[英]How to change the default rails server in Rails 3?
我是Rails的新手,我想知道是否有一個選項來更改默認的rails服務器,即webrick,用於另一個例如'puma'或'thin'。 我知道可以使用'rails server'命令指定運行哪個服務器,但是我想使用此命令而不指定服務器的名稱,以便它可以運行默認的rails服務器。 有沒有辦法將默認的rails服務器更改為配置文件或類似的東西? 在此先感謝您的幫助!
基於James Hebden
的回答:
將Puma
添加到gemfile
# Gemfile
gem 'puma'
捆綁安裝它
bundle
將其設為默認值,將此代碼粘貼到require 'rails/commands'
script/rails
上:
require 'rack/handler'
Rack::Handler::WEBrick = Rack::Handler.get(:puma)
所以script/rails
(在Rails
3.2.12
)將如下所示:
#!/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::WEBrick = Rack::Handler.get(:puma)
require 'rails/commands'
運行服務器
rails s
=> Booting Puma
Rack(rails和web服務器之間的接口)具有默認WEBrick和Thin的處理程序。 如果將以下內容放在rails項目根目錄中的Gemfile
中
gem 'thin'
rails服務器會自動使用Thin。 自3.2rc2以來就是如此。
遺憾的是,這僅適用於Thin,因為Rack沒有內置支持Unicorn等。
對於擁有Rack處理程序的服務器(再次,可悲的是Unicorn沒有),你可以做一些破解讓rails服務器使用它們。 在rails項目根目錄的scripts / rails文件中,您可以在`require'trail / commands'上面添加以下內容
require 'rack/handler'
Rack::Handler::WEBrick = Rack::Handler::<name of handler class>
這實質上將WEBrick的處理程序重置為指向您要使用的服務器的處理程序。
要了解支持的Rack處理程序,請查看源代碼中的注釋: https : //github.com/rkh/rack/blob/master/lib/rack/handler.rb
我認為rails只是傳遞給提供給機架的服務器選項。 Rack具有以下邏輯來確定要運行的服務器:
https://github.com/rack/rack/blob/master/lib/rack/server.rb#L271-L273
def server
@_server ||= Rack::Handler.get(options[:server]) || Rack::Handler.default(options)
end
第一種情況是將:server
選項傳遞給rails server
命令。 第二是確定默認值。 看起來像:
https://github.com/rack/rack/blob/master/lib/rack/handler.rb#L46-L59
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
pick ['thin', 'puma', 'webrick']
end
end
應該自動拾取Thin和Puma。 后退是Webrick。 當然,其他Web服務器可以覆蓋此行為,使其成為鏈中的第一個。
如果默認情況下沒有選擇您的Web服務器,您可以修改default
方法以使其工作。 當然,這可能會在未來版本的機架中出現問題。
Rack現在將查看RACK_HANDLER
環境變量文件,以查看您是否指定了默認的機架處理程序。 如果您使用的是dotenv,則可以將這樣的行添加到.env文件中以設置默認值,或者從命令行指定賦值。
`RACK_HANDLER=webrick`
這應該適用於此拉取請求:
如果你想要unicorn / thin / etc,只需將gem添加到你的gemfile中
即gem 'unicorn'
, gem 'thin'
等,然后在命令行運行bundle install
。
據我所知,添加這些寶石中的任何一個都可以通過rails server
運行相應的rails server
UPDATE
顯然這僅適用於Thin或Puma。
我不會專門使用rails server
命令。 只需安裝你想要的任何寶石,並將命令(例如rails s Puma
)別名為rs
簡單東西。
如果你的Gemfile中有瘦 ,你需要這樣做:
require 'rack/handler'
Rack::Handler::Thin = Rack::Handler.get(:puma)
如果你使用bash run: export RACK_HANDLER=webrick
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.