您可能已经尝试过 Laravel Octane 和 RoadRunner,这是一款用 Go 编写的简洁的小型 PHP 服务器。在 Octane 和 RoadRunner 的基本安装中,您会注意到一个 .rr.yaml 文件被写入项目文件夹,但实际上是空的。同样,如果您尝试使用 ./rr 运行 RoadRunner 二进制文件,那么它将因缺少配置值而失败,相反,您应该通过 php artisan octane:start 命令运行 Octane。
这是有效的,因为 octane:start 命令在托管进程中运行 RoadRunner 二进制文件本身,同时通过带有一些环境变量的命令行参数配置服务器。
如果我们想在没有 start 命令的情况下运行 RoadRunner 二进制文件,我们必须使用相同的命令参数运行它,或者自己填写 .rr.yaml 配置。这些值需要如下:
http:
address: 127.0.0.1:8000
pool:
num_workers: 0
max_jobs: 500
supervisor:
exec_ttl: 30s
static:
dir: public
middleware: ["static"]
server:
command: "php ./vendor/bin/roadrunner-worker"
env:
- APP_ENV: production
- APP_BASE_PATH: "/path/to/your/laravel/protect"
- LARAVEL_OCTANE: "1"
rpc:
listen: tcp://127.0.0.1:6001
logs:
mode: production
level: debug
output: stdout
encoding: json
虽然配置中有两个部分您可能希望更改。即服务器命令的 envs。要运行该过程,您必须通过此文件对APP_BASE_PATH和APP_ENV进行硬编码,这可能会很痛苦。
另一件需要注意的事情是,默认情况下,Laravel Octane 在项目的 .gitignore 文件中安装了带有 .rr.yaml 配置文件的 RoadRunner,因此您必须在每台机器上进行设置,除非您决定更改它,尽管目前我认为最好添加您使用的每台设备的配置,因为基本路径可能会在每台机器上更改。
修改后的 .rr.yaml 文件到位后,您现在可以运行 ./rr serve 命令并运行服务器,而无需使用 artisan。
为什么要直接运行 RoadRunner?
这可能会成为一个问题,为什么直接使用 road runner 二进制文件可能更好,答案是,对于大多数人来说,事实并非如此。就我自己而言,我打算在未来构建更多的 roadrunner,包括在 docker 容器中运行服务器。因此,我实际上需要 RoadRunner 将其日志记录信息直接输出到 stdout 中,而不是使用 octane:start 命令将此日志记录信息混淆为自己的格式,从而使查看请求状态变得非常简单。
希望这对一些希望更深入地了解 RoadRunner 以及如何在基本设置之外对其进行自定义的人有用。如果您想了解有关 RoadRunner 配置中可用选项的更多信息,可以在文档中阅读相关内容。
在安装laravel octane扩展后,运行roadrunner时,出现Undefined constant "Laravel\Octane\Commands\Concerns\SIGINT"错误。
这是因为代码中没有检查是否安装了pcntl扩展导致的,也就是说roadrunner需要pcntl库。
因此,安装ext-pcntl扩展后运行即可。