服务器模式
服务器模式在 RuboCop 1.31 中引入。如果您使用的是旧版本的 RuboCop,您可以查看 rubocop-daemon 项目,该项目是 RuboCop 内置功能的灵感来源。 |
您可以通过使用 --server
命令行选项来显著减少 RuboCop 的启动时间(大约快 850 倍)。
--server
选项通过利用一个独立的服务器进程来加速 rubocop
命令的启动,该进程加载 RuboCop 运行时生产文件(即 require 'rubocop'
)。
通常,RuboCop 启动速度比较慢,因为它需要 require
很多文件,而这很慢。使用 RuboCop 服务器,我们可以绕过这个讨厌的问题,使从文本编辑器和 IDE 与 RuboCop 交互变得更加愉快。
此功能不能在 JRuby 和 Windows 上使用,因为它们不支持 fork 系统调用。
|
使用服务器运行
有两种方法可以启用服务器
-
rubocop --server
:如果服务器进程尚未启动,则启动服务器进程并使用服务器执行检查。 -
rubocop --start-server
:只启动服务器进程。
服务器启动后,它会输出主机和端口。
$ rubocop --start-server
RuboCop server starting on 127.0.0.1:55772.
如果服务器已启动,则 rubocop 命令将使用服务器进程执行。只要服务器进程未运行,它就会加载 RuboCop 运行时文件并执行。(与 RuboCop 1.30 及更低版本的行为相同)
|
如果服务器已在运行,该命令只会显示服务器的 PID。不会启动新的服务器。
$ rubocop --start-server
RuboCop server (16060) is already running.
服务器进程名称基本上是 rubocop --server
和项目目录路径
$ ps aux | grep 'rubocop --server'
user 16060 0.0 0.0 5078568 2264 ?? S 7:54AM 0:00.00 rubocop --server /Users/user/src/github.com/rubocop/rubocop
user 16337 0.0 0.0 5331560 2396 ?? S 23:51PM 0:00.00 rubocop --server /Users/user/src/github.com/rubocop/rubocop-rails
当您更新并运行 rubocop
时,服务器进程会自动重启。
$ rubocop --server
RuboCop version incompatibility found, RuboCop server restarting...
RuboCop server starting on 127.0.0.1:60665.
如果您想在前景启动服务器,这在 Docker 中运行时可能很有用,您可以传递 --no-detach
选项。
$ rubocop --start-server --no-detach
重启服务器
已启动的服务器不会重新加载配置文件。升级 RuboCop 或更改 RuboCop 配置后,您需要重启服务器。
$ rubocop --restart-server
RuboCop server starting on 127.0.0.1:55822.
命令行选项
以下是服务器操作的命令行选项
命令标志 | 描述 |
---|---|
|
如果尚未启动服务器进程,则启动服务器进程并使用服务器执行检查。 |
|
如果已启动服务器进程,则停止服务器进程并使用服务器执行检查。 |
|
重启服务器进程。 |
|
启动服务器进程。 |
|
停止服务器进程。 |
|
显示服务器状态。 |
|
在前景运行服务器进程。 |
您可以使用 $RUBOCOP_SERVER_HOST 和 $RUBOCOP_SERVER_PORT 环境变量指定服务器主机和端口。 |
如果 RUBOCOP_OPTS
环境变量或 .rubocop
文件包含 --server
选项,则 rubocop
命令默认为服务器模式。命令行中指定的其他服务器选项(例如 stop-server
、restart-server
)将优先于它们。