Symfony 2.2.1 rsync部署-无法在远程服务器上工作



我对Symfony很陌生,我正在尝试使用rsync自动化部署过程,同时保持Symfony的本地和远程安装正常工作。

到目前为止我所做的:

  • 在我的本地机器上安装了Cygwin(Windows 7+Apache2.2+PHP 5.3+MySQL 5.1(
  • 使用命令从shell在本地计算机上完成了基本的Symfony安装php composer.phar create-project symfony/framework-standard-edition [path]/ 2.2.1
  • 使用php-fpm(fastcgi(设置远程LAMP Ubuntu服务器
  • app/config/目录中为本地和远程设置两个不同的配置文件,parameters.yml和parameters.yml.remote
  • 创建了一个app/config/rsync_exclude.txt文件,其中包含要rsync到远程服务器的文件列表(如本页中所建议的(
  • 创建了一个部署shell脚本,我从Cygwin运行该脚本(见下文(

部署脚本发出以下命令:

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

rsyncsshmv命令可以工作,但部署的站点始终显示HTTP500错误(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 ('ComposerAutoloadClassLoader' === $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 ComposerAutoloadClassLoader();
        // ^^^^^^ 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;
    }
}

如果composer生成的自动加载器出现错误,则执行。。。

composer update

将更新您的依赖项并创建一个新的依赖项。

如果要部署到生产系统,则应使用-o标志调用该命令。

通过这种方式,composer生成了一个classmap自动加载器(性能更好(,而不是经典的自动加载器。

composer update -o

我想重新生成自动加载器将解决这个问题:(

最新更新