2013-05-24 3 views
1

Я очень новичок в Symfony, и я пытаюсь автоматизировать процесс развертывания с помощью rsync, сохраняя при этом как локальную, так и удаленную установку Symfony.Symfony 2.2.1 rsync deploy - не работает на удаленном сервере

Что я сделал до сих пор:

  • установлен Cygwin на моей локальной машине (Windows 7 + apache2.2 + PHP 5.3 + MySQL 5.1)
  • сделал основной Symfony установить на моей локальной машине от оболочки с помощью команды php composer.phar create-project symfony/framework-standard-edition [path]/ 2.2.1
  • установить удаленную ЛАМПЫ Ubuntu сервер с PHP-FPM (FastCGI)
  • созданы две различные файлы конфигурации для локального и удаленного в app/config/, реж parameters.yml и parameters.yml. дистанционный пульт
  • создал app/config/rsync_exclude.txt файл, содержащий список файлов не к Rsync к удаленному серверу (как это было предложено в this page)
  • создал сценарий развертывания оболочки, который я бегу от Cygwin (см ниже)

сценарий развертывания выдает команды:

rsync -avz /cygdrive/c/[path]/ [email protected]:[remote-path]/ --exclude-from=/cygdrive/c/[path]/app/config/rsync_exclude.txt 
ssh [email protected] 'cd [remote-path]/ && php app/console --env=prod cache:clear && php app/console cache:clear' 
ssh [email protected] 'mv [remote-path]/app/config/parameters.yml.remote ~/[remote-path]/app/config/parameters.yml' 

rsync, ssh и mv, но развернутый сайт всегда показывает ошибку HTTP 500 (как app.php, так и app_dev.php). Глядя на ошибки сервера лог ошибки:

Fatal error: Class 'Composer\\Autoload\\ClassLoader' not found in /[remote-path]/vendor/composer/autoload_real.php on line 23 

Любой ключ будет более чем приветствуется.

Редактировать - вот мой vendor/composer/autoload_real.php файл (извините за что делает этот вопрос больше!):

<?php 

// autoload_real.php generated by Composer 

class ComposerAutoloaderInit9d50f07556e53717271b583e52c7de25 
{ 
    private static $loader; 

    public static function loadClassLoader($class) 
    { 
     if ('Composer\Autoload\ClassLoader' === $class) { 
      require __DIR__ . '/ClassLoader.php'; 
     } 
    } 

    public static function getLoader() 
    { 
     if (null !== self::$loader) { 
      return self::$loader; 
     } 

     spl_autoload_register(array('ComposerAutoloaderInit9d50f07556e53717271b583e52c7de25', 'loadClassLoader'), true, true); 
     self::$loader = $loader = new \Composer\Autoload\ClassLoader(); 
     // ^^^^^^ this is line 23 and gives the error ^^^^^^^^^^^ 
     spl_autoload_unregister(array('ComposerAutoloaderInit9d50f07556e53717271b583e52c7de25', 'loadClassLoader')); 

     $vendorDir = dirname(__DIR__); 
     $baseDir = dirname($vendorDir); 

     $map = require __DIR__ . '/autoload_namespaces.php'; 
     foreach ($map as $namespace => $path) { 
      $loader->add($namespace, $path); 
     } 

     $classMap = require __DIR__ . '/autoload_classmap.php'; 
     if ($classMap) { 
      $loader->addClassMap($classMap); 
     } 

     $loader->register(true); 

     require $vendorDir . '/kriswallsmith/assetic/src/functions.php'; 
     require $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php'; 

     return $loader; 
    } 
} 
+0

, имеющий взглянуть на ваш autoload_real.php может быть полезно :) – nifr

+0

@nifr здесь вы идете :) –

+0

попробовать «обновление композитора - o "перед загрузкой rsync, пожалуйста. оптимизированный автозагрузчик (classmap) - это путь для производственных систем :) – nifr

ответ

1

Если есть ошибка с автозагрузчиком генерируемого композитором, выполняя ...

composer update 

... обновит ваши зависимости и создаст новый.

Вы должны вызвать команду с этим флагом -o при развертывании в системе в производства.

В этом случае композитор генерирует автозагрузчик classmap (который лучше работает лучше) вместо классического автозагрузчика.

composer update -o 

Я думаю повторно генерировать автозагрузчик будет решать вопрос :)