Coder Social home page Coder Social logo

yiisoft / yii-runner-roadrunner Goto Github PK

View Code? Open in Web Editor NEW
29.0 18.0 8.0 189 KB

Web application runner for RoadRunner

Home Page: https://www.yiiframework.com/

License: BSD 3-Clause "New" or "Revised" License

PHP 96.02% Makefile 2.38% Dockerfile 1.60%
yii3 roadrunner hacktoberfest

yii-runner-roadrunner's Introduction

Yii

Yii RoadRunner Runner


Latest Stable Version Total Downloads Build status Scrutinizer Code Quality Code Coverage Mutation testing badge static analysis type-coverage

The package contains a bootstrap for running Yii3 applications using RoadRunner.

Requirements

  • PHP 8.1 or higher.

Installation

The package could be installed with Composer:

composer require yiisoft/yii-runner-roadrunner

General usage

Get RoadRunner:

./vendor/bin/rr get

Create worker.php in your application root directory:

use Yiisoft\Yii\Runner\RoadRunner\RoadRunnerHttpApplicationRunner;

ini_set('display_errors', 'stderr');

require_once __DIR__ . '/autoload.php';

(new RoadRunnerHttpApplicationRunner(
    rootPath: __DIR__, 
    debug: $_ENV['YII_DEBUG'], 
    checkEvents: $_ENV['YII_DEBUG'], 
    environment: $_ENV['YII_ENV']
))->run();

Specify it in your .rr.yaml:

version: '3'
server:
    command: "php ./worker.php"

rpc:
    listen: tcp://127.0.0.1:6001

http:
    address: :8082
    pool:
        num_workers: 8
        # Debug mode for the pool. In this mode, pool will not pre-allocate the worker.
        # Worker (only 1, num_workers ignored) will be allocated right after the request arrived.
        debug: false
    middleware: ["static", "headers"]
    static:
        dir:   "./public"
        forbid: [".php", ".htaccess"]
    headers:
        response:
            "Cache-Control": "no-cache"

logs:
    mode: production
    level: warn

Note: Official configuration reference. You can also activate RoadRunner schema in your IDE to get autocompletion hints.

Run RoadRunner with the config specified:

./rr serve

Additional configuration

By default, the RoadRunnerHttpApplicationRunner is configured to work with Yii application templates and follows the config groups convention.

You can override the default configuration using constructor parameters and immutable setters.

Constructor parameters

$rootPath — the absolute path to the project root.

$debug — whether the debug mode is enabled.

$checkEvents — whether check events' configuration.

$environment — the environment name.

$bootstrapGroup — the bootstrap configuration group name.

$eventsGroup — the events' configuration group name.

$diGroup — the container definitions' configuration group name.

$diProvidersGroup — the container providers' configuration group name.

$diDelegatesGroup — the container delegates' configuration group name.

$diTagsGroup — the container tags' configuration group name.

$paramsGroup — the config parameters group name.

$nestedParamsGroups — configuration group names that are included into config parameters group. This is needed for recursive merge parameters.

$nestedEventsGroups — configuration group names that are included into events' configuration group. This is needed for reverse and recursive merge events' configurations.

Immutable setters

If the configuration instance settings differ from the default you can specify a customized configuration instance:

/**
 * @var Yiisoft\Config\ConfigInterface $config
 * @var Yiisoft\Yii\Runner\RoadRunner\RoadRunnerHttpApplicationRunner $runner
 */

$runner = $runner->withConfig($config);

The default container is Yiisoft\Di\Container. But you can specify any implementation of the Psr\Container\ContainerInterface:

/**
 * @var Psr\Container\ContainerInterface $container
 * @var Yiisoft\Yii\Runner\RoadRunner\RoadRunnerHttpApplicationRunner $runner
 */

$runner = $runner->withContainer($container);

In addition to the error handler that is defined in the container, the runner uses a temporary error handler. A temporary error handler is needed to handle the creation of configuration and container instances, then the error handler configured in your application configuration will be used.

By default, the temporary error handler uses HTML renderer and logging to a file. You can override this as follows:

/**
 * @var Psr\Log\LoggerInterface $logger
 * @var Yiisoft\ErrorHandler\Renderer\PlainTextRenderer $renderer
 * @var Yiisoft\Yii\Runner\RoadRunner\RoadRunnerHttpApplicationRunner $runner
 */

$runner = $runner->withTemporaryErrorHandler(
    new Yiisoft\ErrorHandler\ErrorHandler($logger, $renderer),
);

You can also use your own implementation of the Spiral\RoadRunner\Http\PSR7WorkerInterface (default is a Spiral\RoadRunner\Http\PSR7Worker):

/**
 * @var Spiral\RoadRunner\Http\PSR7WorkerInterface $psr7Worker
 * @var Yiisoft\Yii\Runner\RoadRunner\RoadRunnerHttpApplicationRunner $runner
 */

$runner = $runner->withPsr7Worker($psr7Worker);

Documentation

If you need help or have a question, the Yii Forum is a good place for that. You may also check out other Yii Community Resources.

License

The Yii RoadRunner Runner is free software. It is released under the terms of the BSD License. Please see LICENSE for more information.

Maintained by Yii Software.

Support the project

Open Collective

Follow updates

Official website Twitter Telegram Facebook Slack

yii-runner-roadrunner's People

Contributors

arogachev avatar dependabot[bot] avatar devanych avatar luizcmarin avatar perfectio avatar phphleb avatar razonyang avatar roxblnfk avatar rustamwin avatar s1lver avatar samdark avatar sankaest avatar terabytesoftw avatar vjik avatar xepozz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yii-runner-roadrunner's Issues

Remove `grpc/grpc` dependency

This dependency is optional and must keep in suggest section only.

But for tests need add grpc/grpc and ext-grpc to require-dev.

Also need add information about suggest packages to readme.

Update RoadRunner PHP packages

After RoadRunner 2023.1 release we have a couple of changes in PHP side packages.

  • All roadrunner-PHP packages have been moved to roadrunner-php organization and they will get or got major updates.
  • Min PHP version now is 8.1.
  • Now spiral/roadrunner has no any dependencies. If we need some package like roadrunner-worker or roadrunner-cli - we need to specify it directly

Catch exceptions from worker::waitRequest() method

while ($request = $worker->waitRequest()) {

Here an exception can be thrown.

See roadrunner-server/roadrunner-docs#73 : in this case exception was thrown when numeric header has been received because numeric keys in PHP are casted into Integer and nyholm's implementation doesn't support it (https://github.com/Nyholm/psr7/blob/fafc2faf8d49b979f922fe416dc8805462dc1fe8/src/MessageTrait.php#L178)

The issue has been resolved with this "kostyl": https://github.com/spiral/roadrunner-http/pull/8/files
But this fix will not protect worker from other exceptions of third-party PSR-7 implementations.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.