如何让 'puma' 在运行 `rails server` 时自动启动(就像 Thin 一样)

31

通常情况下,当你运行rails server时,它会启动Webrick服务器。如果你安装了"thin" gem,则会启动"thin"服务器。我希望用同样的方式来启动'puma'服务器。

我看到在railties(lib/rails/commands)中的start命令调用super函数,但我找不到'super'的各种选项。我还研究了许多有关'thin'的Rails参考资料。

我找到了一个名为“Added Thin support to script/server. #488 [Bob Klosinski]” 的Changelog条目,日期是2008年10月,但该提交(a93ea88c0623b4f65af98c0eb55924c335bb3ac1)后该代码区域发生了重大变化。

如果有人能把我指向正确的代码部分,那将非常有帮助。

4个回答

59

经过一番搜索,我找到了这个答案:https://dev59.com/C2Yq5IYBdhLWcg3w2EJi#14911994

要将 Puma 设置为默认选项,请将以下代码粘贴到 script/rails 文件中 require 'rails/commands' 的上方:

require 'rack/handler'
Rack::Handler::WEBrick = Rack::Handler.get(:puma)

如果你使用rails s,则Puma现在是默认的服务器。

rails s
=> Booting Puma
=> Rails 3.2.12 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Connecting to database specified by database.yml
Puma 1.6.3 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:3000

Rails 4

使用Rails 4,只需在Gemfile中添加puma-gem即可。(已测试过Rails 4.0.2和Puma 2.6.0)


这对我没有用。但我认为这是因为我的应用程序正在使用thin。 - betomoretti
我该如何做相反的操作?我不希望在开发环境中默认加载puma。 - abhishek77in

19

至少在Rails 4中,您只需要将以下内容添加到Gemfile中

gem 'puma'

然后运行'bundle',接着当你运行'rails server'时将使用Puma。


1
这个可以运行。现在如果我能弄清楚如何在运行“rails server”时自动加载config/puma.rb就好了... - odigity
2
echo 'alias start_puma="bundle exec puma -p 3000 -S ~/puma -C config/puma.rb"' >> ~/.bash_profile && source ~/.bash_profile 然后使用 start_puma - blnc
刚在Rails 4.2上进行了测试,运行bundle exec rails s将启动puma并自动加载来自config/puma.rb的配置设置。 - Joshua Pinter

11

这对我有效。Ruby 2.0.0 Rails 3.2.13 Puma 1.6.3

rails s puma

这让我很困扰,因为ARGV[0]不是空的。reload_libs会加载lib/tasks/*,我假设如果设置了ARGV[0],那么我想将其作为命令执行。 - pedz

2

Puma文档建议您在config.ru前面加上#\ -s puma


谢谢。我试过了,但没有成功。仍然会出现“Booting WEBrick”或“Booting Thin”的提示。我想知道这是否是Rails的一个bug? - Matt Scilipoti
@MattScilipoti 这一定是Rack的问题。但我认为这不是一个错误,而是你缺少一些设置。 - RocketR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接