我对 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/
dir、parameters.yml 和parameters.yml.remote
- 创建了一个
app/config/rsync_exclude.txt
包含文件列表的文件notrsync 到远程服务器(如建议的那样)这一页 http://bordenia.wordpress.com/2012/04/14/deploying-your-symfony-2-0-web-app-to-the-production-server/)
- 创建了一个从 Cygwin 运行的部署 shell 脚本(见下文)
The 部署脚本发出命令:
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'
The rsync
, ssh
and 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
任何线索都将受到欢迎。
Edit- 这是我的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;
}
}
如果由作曲家生成的自动加载器有错误,则执行...
composer update
...将更新您的依赖项并创建一个新的依赖项。
您应该使用以下命令调用该命令-o如果您要部署到生产系统.
通过这种方式,composer 生成一个类映射自动加载器(性能更好)而不是经典的自动加载器。
composer update -o
我想重新生成自动加载器可以解决问题:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)