[WebServerBundle] Change the default pidfile location to cache directory

This commit is contained in:
Jan Schädlich 2019-04-26 21:24:13 +02:00 committed by Fabien Potencier
parent 77f642ef39
commit 2e14b6e891
8 changed files with 78 additions and 7 deletions

View File

@ -31,13 +31,15 @@ class ServerRunCommand extends Command
{ {
private $documentRoot; private $documentRoot;
private $environment; private $environment;
private $pidFileDirectory;
protected static $defaultName = 'server:run'; protected static $defaultName = 'server:run';
public function __construct(string $documentRoot = null, string $environment = null) public function __construct(string $documentRoot = null, string $environment = null, string $pidFileDirectory = null)
{ {
$this->documentRoot = $documentRoot; $this->documentRoot = $documentRoot;
$this->environment = $environment; $this->environment = $environment;
$this->pidFileDirectory = $pidFileDirectory;
parent::__construct(); parent::__construct();
} }
@ -129,7 +131,7 @@ EOF
} }
try { try {
$server = new WebServer(); $server = new WebServer($this->pidFileDirectory);
$config = new WebServerConfig($documentRoot, $env, $input->getArgument('addressport'), $input->getOption('router')); $config = new WebServerConfig($documentRoot, $env, $input->getArgument('addressport'), $input->getOption('router'));
$message = sprintf('Server listening on http://%s', $config->getAddress()); $message = sprintf('Server listening on http://%s', $config->getAddress());

View File

@ -31,13 +31,15 @@ class ServerStartCommand extends Command
{ {
private $documentRoot; private $documentRoot;
private $environment; private $environment;
private $pidFileDirectory;
protected static $defaultName = 'server:start'; protected static $defaultName = 'server:start';
public function __construct(string $documentRoot = null, string $environment = null) public function __construct(string $documentRoot = null, string $environment = null, string $pidFileDirectory = null)
{ {
$this->documentRoot = $documentRoot; $this->documentRoot = $documentRoot;
$this->environment = $environment; $this->environment = $environment;
$this->pidFileDirectory = $pidFileDirectory;
parent::__construct(); parent::__construct();
} }
@ -133,7 +135,7 @@ EOF
$this->getApplication()->setDispatcher(new EventDispatcher()); $this->getApplication()->setDispatcher(new EventDispatcher());
try { try {
$server = new WebServer(); $server = new WebServer($this->pidFileDirectory);
if ($server->isRunning($input->getOption('pidfile'))) { if ($server->isRunning($input->getOption('pidfile'))) {
$io->error(sprintf('The web server has already been started. It is currently listening on http://%s. Please stop the web server before you try to start it again.', $server->getAddress($input->getOption('pidfile')))); $io->error(sprintf('The web server has already been started. It is currently listening on http://%s. Please stop the web server before you try to start it again.', $server->getAddress($input->getOption('pidfile'))));

View File

@ -30,6 +30,15 @@ class ServerStatusCommand extends Command
{ {
protected static $defaultName = 'server:status'; protected static $defaultName = 'server:status';
private $pidFileDirectory;
public function __construct(string $pidFileDirectory = null)
{
$this->pidFileDirectory = $pidFileDirectory;
parent::__construct();
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -64,7 +73,7 @@ EOF
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
$io = new SymfonyStyle($input, $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : $output); $io = new SymfonyStyle($input, $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : $output);
$server = new WebServer(); $server = new WebServer($this->pidFileDirectory);
if ($filter = $input->getOption('filter')) { if ($filter = $input->getOption('filter')) {
if ($server->isRunning($input->getOption('pidfile'))) { if ($server->isRunning($input->getOption('pidfile'))) {
list($host, $port) = explode(':', $address = $server->getAddress($input->getOption('pidfile'))); list($host, $port) = explode(':', $address = $server->getAddress($input->getOption('pidfile')));

View File

@ -28,6 +28,15 @@ class ServerStopCommand extends Command
{ {
protected static $defaultName = 'server:stop'; protected static $defaultName = 'server:stop';
private $pidFileDirectory;
public function __construct(string $pidFileDirectory = null)
{
$this->pidFileDirectory = $pidFileDirectory;
parent::__construct();
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -55,7 +64,7 @@ EOF
$io = new SymfonyStyle($input, $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : $output); $io = new SymfonyStyle($input, $output instanceof ConsoleOutputInterface ? $output->getErrorOutput() : $output);
try { try {
$server = new WebServer(); $server = new WebServer($this->pidFileDirectory);
$server->stop($input->getOption('pidfile')); $server->stop($input->getOption('pidfile'));
$io->success('Stopped the web server.'); $io->success('Stopped the web server.');
} catch (\Exception $e) { } catch (\Exception $e) {

View File

@ -31,6 +31,12 @@ class WebServerExtension extends Extension
$container->getDefinition('web_server.command.server_run')->replaceArgument(0, $publicDirectory); $container->getDefinition('web_server.command.server_run')->replaceArgument(0, $publicDirectory);
$container->getDefinition('web_server.command.server_start')->replaceArgument(0, $publicDirectory); $container->getDefinition('web_server.command.server_start')->replaceArgument(0, $publicDirectory);
$pidFileDirectory = $this->getPidFileDirectory($container);
$container->getDefinition('web_server.command.server_run')->replaceArgument(2, $pidFileDirectory);
$container->getDefinition('web_server.command.server_start')->replaceArgument(2, $pidFileDirectory);
$container->getDefinition('web_server.command.server_stop')->replaceArgument(0, $pidFileDirectory);
$container->getDefinition('web_server.command.server_status')->replaceArgument(0, $pidFileDirectory);
if (!class_exists(ConsoleFormatter::class)) { if (!class_exists(ConsoleFormatter::class)) {
$container->removeDefinition('web_server.command.server_log'); $container->removeDefinition('web_server.command.server_log');
} }
@ -54,4 +60,16 @@ class WebServerExtension extends Extension
return $kernelProjectDir.'/'.$publicDir; return $kernelProjectDir.'/'.$publicDir;
} }
private function getPidFileDirectory(ContainerBuilder $container): string
{
$kernelCacheDir = $container->getParameter('kernel.cache_dir');
$environment = $container->getParameter('kernel.environment');
if (basename($kernelCacheDir) !== $environment) {
return $container->getParameter('kernel.project_dir');
}
return \dirname($container->getParameter('kernel.cache_dir'));
}
} }

View File

@ -10,20 +10,24 @@
<service id="web_server.command.server_run" class="Symfony\Bundle\WebServerBundle\Command\ServerRunCommand"> <service id="web_server.command.server_run" class="Symfony\Bundle\WebServerBundle\Command\ServerRunCommand">
<argument>%kernel.project_dir%/public</argument> <argument>%kernel.project_dir%/public</argument>
<argument>%kernel.environment%</argument> <argument>%kernel.environment%</argument>
<argument>%kernel.project_dir%/var/cache</argument>
<tag name="console.command" command="server:run" /> <tag name="console.command" command="server:run" />
</service> </service>
<service id="web_server.command.server_start" class="Symfony\Bundle\WebServerBundle\Command\ServerStartCommand"> <service id="web_server.command.server_start" class="Symfony\Bundle\WebServerBundle\Command\ServerStartCommand">
<argument>%kernel.project_dir%/public</argument> <argument>%kernel.project_dir%/public</argument>
<argument>%kernel.environment%</argument> <argument>%kernel.environment%</argument>
<argument>%kernel.project_dir%/var/cache</argument>
<tag name="console.command" command="server:start" /> <tag name="console.command" command="server:start" />
</service> </service>
<service id="web_server.command.server_stop" class="Symfony\Bundle\WebServerBundle\Command\ServerStopCommand"> <service id="web_server.command.server_stop" class="Symfony\Bundle\WebServerBundle\Command\ServerStopCommand">
<argument>%kernel.project_dir%/var/cache</argument>
<tag name="console.command" command="server:stop" /> <tag name="console.command" command="server:stop" />
</service> </service>
<service id="web_server.command.server_status" class="Symfony\Bundle\WebServerBundle\Command\ServerStatusCommand"> <service id="web_server.command.server_status" class="Symfony\Bundle\WebServerBundle\Command\ServerStatusCommand">
<argument>%kernel.project_dir%/var/cache</argument>
<tag name="console.command" command="server:status" /> <tag name="console.command" command="server:status" />
</service> </service>

View File

@ -22,6 +22,8 @@ class WebServerExtensionTest extends TestCase
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->setParameter('kernel.project_dir', __DIR__); $container->setParameter('kernel.project_dir', __DIR__);
$container->setParameter('kernel.cache_dir', __DIR__.'/var/cache/test');
$container->setParameter('kernel.environment', 'test');
(new WebServerExtension())->load([], $container); (new WebServerExtension())->load([], $container);
$this->assertSame( $this->assertSame(
@ -32,6 +34,24 @@ class WebServerExtensionTest extends TestCase
__DIR__.'/test', __DIR__.'/test',
$container->getDefinition('web_server.command.server_start')->getArgument(0) $container->getDefinition('web_server.command.server_start')->getArgument(0)
); );
$this->assertSame(
__DIR__.'/var/cache',
$container->getDefinition('web_server.command.server_run')->getArgument(2)
);
$this->assertSame(
__DIR__.'/var/cache',
$container->getDefinition('web_server.command.server_start')->getArgument(2)
);
$this->assertSame(
__DIR__.'/var/cache',
$container->getDefinition('web_server.command.server_stop')->getArgument(0)
);
$this->assertSame(
__DIR__.'/var/cache',
$container->getDefinition('web_server.command.server_status')->getArgument(0)
);
$this->assertTrue($container->hasDefinition('web_server.command.server_run')); $this->assertTrue($container->hasDefinition('web_server.command.server_run'));
$this->assertTrue($container->hasDefinition('web_server.command.server_start')); $this->assertTrue($container->hasDefinition('web_server.command.server_start'));
$this->assertTrue($container->hasDefinition('web_server.command.server_stop')); $this->assertTrue($container->hasDefinition('web_server.command.server_stop'));

View File

@ -25,6 +25,13 @@ class WebServer
const STARTED = 0; const STARTED = 0;
const STOPPED = 1; const STOPPED = 1;
private $pidFileDirectory;
public function __construct(string $pidFileDirectory = null)
{
$this->pidFileDirectory = $pidFileDirectory;
}
public function run(WebServerConfig $config, $disableOutput = true, callable $callback = null) public function run(WebServerConfig $config, $disableOutput = true, callable $callback = null)
{ {
if ($this->isRunning()) { if ($this->isRunning()) {
@ -166,6 +173,6 @@ class WebServer
private function getDefaultPidFile() private function getDefaultPidFile()
{ {
return getcwd().'/.web-server-pid'; return ($this->pidFileDirectory ?? getcwd()).'/.web-server-pid';
} }
} }