Bonjour,

Voila je rencontre un petit problème avec mon code.

Je souheterais mettre mon site en production sur un VPS chez OVH. En local tout fonctionne très bien.
Du coup j'importe tout le dossier sur le serveur. Je fais le fichier de configuration et les .htaccess :

roadsofearth.conf

<VirtualHost *:80>
    ServerName www.roadsofearth.com
    DocumentRoot /var/www/html/roadsofearth/web
    <Directory "/var/www/html/roadsofearth/web">
        AllowOverride all
        Require all granted
    </Directory>
</VirtualHost>

.htaccess (/var/www/html/roadsofearth) :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /web/$1 [QSA,END]
</IfModule>

.htaccess (/var/www/html/roadsofearth/web) :

<IfModule mod_rewrite.c>
    Options -MultiViews

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [QSA,L]
</IfModule>

J'ai ensuite installer composer et j'ai installer et updater les dépendances avec l'option --no-dev.
Et du coup quand on se rend sur www.roadsofearth.com ça me met cette erreur que je trouve déjà assez étrange...

Fatal error: Uncaught Twig_Error_Loader: Template "errors/500.html.twig" is not defined. in /var/www/html/roadsofearth/vendor/twig/twig/lib/Twig/Loader/Chain.php:129 Stack trace: #0 /var/www/html/roadsofearth/vendor/twig/twig/lib/Twig/Environment.php(329): Twig_Loader_Chain->getCacheKey('errors/500.html...') #1 /var/www/html/roadsofearth/vendor/twig/twig/lib/Twig/Environment.php(419): Twig_Environment->getTemplateClass('errors/500.html...') #2 /var/www/html/roadsofearth/vendor/twig/twig/lib/Twig/Environment.php(567): Twig_Environment->loadTemplate('errors/500.html...') #3 /var/www/html/roadsofearth/src/controllers.php(30): Twig_Environment->resolveTemplate(Array) #4 [internal function]: {closure}(Object(Doctrine\DBAL\Exception\ConnectionException), Object(Symfony\Component\HttpFoundation\Request), 500) #5 /var/www/html/roadsofearth/vendor/silex/silex/src/Silex/ExceptionListenerWrapper.php(53): call_user_func(Object(Closure), Object(Doctrine\DBAL\Exception\ConnectionException), Object(Symfony\Component\HttpFoundation\Reque in /var/www/html/roadsofearth/vendor/twig/twig/lib/Twig/Loader/Chain.php on line 129

J'ai essayé de mettre plusieurs chemin pour arriver au fichier concerné et aucun ne fonctionne. Du coup j'avais trouvé un bout de code qui permettait de pallier à ce problème :

<?php

use Silex\Application; // application
use Silex\Provider\AssetServiceProvider; // route
use Silex\Provider\TwigServiceProvider; // moteur de template
use Silex\Provider\ServiceControllerServiceProvider; // generer toute les routes
use Silex\Provider\HttpFragmentServiceProvider; // charge html dans template
use Doctrine\DBAL\Connection; // connection base de donnée
use Silex\Provider\FormServiceProvider; // Formulaire
use Symfony\Component\HttpFoundation\Request; 

$app = new Application(); // initialisation de la class application
$app->register(new ServiceControllerServiceProvider());
$app->register(new AssetServiceProvider());
$app->register(new TwigServiceProvider());
$app->register(new HttpFragmentServiceProvider());
// Register service providers.
$app->register(new Silex\Provider\DoctrineServiceProvider());
$app->register(new Silex\Provider\SessionServiceProvider());
$app->register(new FormServiceProvider());
$app->register(new Silex\Provider\LocaleServiceProvider());
$app->register(new Silex\Provider\ValidatorServiceProvider());
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'locale_fallbacks' => array('fr'),
));

// Register error handler 

$app->error(function (\Exception $e, Request $request, $code) use ($app) {
    switch ($code) {
        case 403:
            $message = 'Access denied.';
            break;
        case 404:
            $message = 'The requested resource could not be found.';
            break;
        default:
            $message = "Something went wrong.";
    }
    return $app['twig']->render('error.html.twig', array('message' => $message));
});

$app['twig'] = $app->extend('twig', function ($twig, $app) {
    // add custom globals, filters, tags, ...

    return $twig;
});

return $app;

Avec ça j'avais du coup unepage blanche... Et dans les logs j'ai ça :

error.log :

[Sat Aug 12 14:58:31.544628 2017] [:error] [pid 8799] [client 66.249.64.25:62884] PHP Fatal error:  Class 'PHPUnit_Framework_TestCase' not found in /var/www/html/roadsofearth/vendor/symfony/security/Http/Tests/Firewall/BasicAuthenticationListenerTest.php on line 21
[Sat Aug 12 15:02:18.650245 2017] [:error] [pid 8802] [client 66.249.64.25:36075] PHP Fatal error:  Class 'Symfony\\Component\\Validator\\Tests\\Constraints\\FileValidatorTest' not found in /var/www/html/roadsofearth/vendor/symfony/validator/Tests/Constraints/FileValidatorPathTest.php on line 16
[Sat Aug 12 15:09:52.544029 2017] [:error] [pid 8855] [client 66.249.64.25:48515] PHP Fatal error:  Class 'PHPUnit\\Framework\\TestCase' not found in /var/www/html/roadsofearth/vendor/silex/silex/tests/Silex/Tests/ControllerTest.php on line 23
[Sat Aug 12 15:40:08.548284 2017] [:error] [pid 8801] [client 66.249.64.26:36400] PHP Fatal error:  Interface 'Psr\\Container\\NotFoundExceptionInterface' not found in /var/www/html/roadsofearth/vendor/pimple/pimple/src/Pimple/Exception/UnknownIdentifierException.php on line 36
[Sat Aug 12 15:47:42.559996 2017] [:error] [pid 8802] [client 66.249.64.26:40940] PHP Fatal error:  Class 'PHPUnit_Framework_TestCase' not found in /var/www/html/roadsofearth/vendor/symfony/security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php on line 18
[Sat Aug 12 15:59:03.544752 2017] [:error] [pid 8798] [client 66.249.64.26:63905] PHP Fatal error:  Class 'PHPUnit_Framework_TestCase' not found in /var/www/html/roadsofearth/vendor/symfony/security/Http/Tests/Firewall/DigestDataTest.php on line 16

Du coup ça fait maintenant un peu plus d'une semaine que je bataille pour mettre en ligne ce site...

Si quelqu'un peut m'aider pour la démarche à suivre ça serai bien cool :D

Merci bien !

3 réponses


Ben Jfry
Auteur
Réponse acceptée

Résolu... J'avais mis dans index.php 'require DIR.'/../config/prod.php';' au lieu de 'require DIR.'/../config/dev.php';'....
J'ai fait ça aussi :
1- Déposer le fichier composer.json sur le serveur, installer les dépendances avec l'option --no-dev. Ca va créer le dossier vendor.
2- Ajouter les autres dossiers et les .htaccess.
Voilà voilà !

Reprenons dans l'ordre :
1/ Tu as eu le bon reflexe de vérifier tes logs. Tu y a d'indiqué qu'il ne peut trouver des classes. La question a se poser maintenant, Les fichiers en question existes-t-ils dans ton dossier vendor ?
Arbre à choix multiple :
1a/ Fichier non présent ? Tu devrais installer composer, et require les dépendances cité dans tes logs à savoir phpunit/phpunit et symfony/validator
1b/ Fichier Présent ? As tu bien require ton composer dans ton entry point ? on ne le voix pas au dessus.
1c/ Fichier Présent ? As tu les droits de lecture ? un coup de sudo chown -R www-data:www-data /var/www/html/roadsofearth pour être sûre que le proprietaire et bien l'utilisateur de Apache/PHP.

Une chose qui t'aiderai, c'est de savoir si tu arrives à afficher une simple page PHP du type :

<?php
phpinfo();

ça permettra de vérifier ta config PHP, on ne sait jamais.

Ben Jfry
Auteur

Salut ! Merci pour cette réponse !
Alors du coup :
Tous les fichiers sont bien présent.
La question 1b/ je ne la comprend pas :/ Je suis débutant désolé :/
J'ai fait la 1c du coup.
Quand je met le phpinfo() dans le index.php au début ça m'affiche bien les infos, avec le css de mon site (le h1 est en gros et blanc du coup).

Le composer.json au cas où :

{
    "name": "fabpot/silex-skeleton",
    "description": "A pre-configured skeleton for the Silex microframework",
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.5.9",
        "silex/silex": "~2.0",
        "silex/web-profiler": "~2.0",
        "symfony/asset": "~2.8|3.0.*",
        "symfony/browser-kit": "~2.8|3.0.*",
        "symfony/class-loader": "~2.8|3.0.*",
        "symfony/config": "~2.8|3.0.*",
        "symfony/console": "~2.8|3.0.*",
        "symfony/css-selector": "~2.8|3.0.*",
        "symfony/debug": "~2.8|3.0.*",
        "symfony/finder": "~2.8|3.0.*",
        "symfony/form": "^3.2",
        "symfony/monolog-bridge": "~2.8|3.0.*",
        "symfony/process": "~2.8|3.0.*",
        "symfony/security": "~2.8|3.0.*",
        "symfony/translation": "^3.2",
        "symfony/twig-bridge": "^3.2",
        "symfony/validator": "^3.2",
        "doctrine/dbal": "~2.5",
        "twig/extensions": "*"
    },
    "require-dev": {
        "phpunit/phpunit": "~5.7",
        "symfony/browser-kit": "~2.8|3.0.*",
        "symfony/css-selector": "~2.8|3.0.*"
    },
    "autoload": {
        "psr-0": { "": "src" }
    },

    "extra": {
        "branch-alias": {
            "dev-master": "2.0.x-dev"
        }
    }
}

Ce que je comprend pas dans les logs c'est qu'il cherche des fichiers qui sont dans le 'require-dev' alors que normalement quand je fais un php composer.phar update --no-dev ça ne devrait pas les installer.

Pour le phpinfo :
Tout en haut il y a ça :
PHP Version 7.0.22-0ubuntu0.16.04.1

Et un peu plus bas dans la partie 'apache environnement' :
PHP_VER 5_3
Y'a peut-être un soucis la non ?
Merci ! :)