[英]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.