Yii2迁移不适用于Heroku

时间:2015-04-11 16:03:03

标签: postgresql heroku migration yii2

最近,我创建了Yii2应用程序(基本模板)并成功将其部署在Heroku上。然后我想设置数据库,所以我为heroku应用程序添加了postgresql插件,并配置了这样的db配置:

if (getenv("YII_ENV") == 'prod') {
    $url = parse_url(getenv("DATABASE_URL"));
    $dsn = 'pgsql:host='.$url['host'].';port='.$url['port'].';dbname='.substr($url["path"], 1);
    $username = $url["user"];
    $password = $url["pass"];
} else {
    $dsn = 'mysql:host=localhost;dbname=yii2_quizie';
    $username = 'root';
    $password = '1234';
}

return [
    'class' => 'yii\db\Connection',
    'dsn' => $dsn,
    'username' => $username,
    'password' => $password,
    'charset' => 'utf8',
];

之后我设置了两个heroku配置变量:YII_ENV=prodYII_DEBUG=false

然后我添加了简单迁移并尝试使用heroku run bash运行它,然后运行php yii migrate

那是我收到的:

~ $ php yii migrate
Exception 'ReflectionException' with message 'Class yii\gii\Module does not exist'

in /app/vendor/yiisoft/yii2/di/Container.php:415

Stack trace:
#0 /app/vendor/yiisoft/yii2/di/Container.php(415): ReflectionClass->__construct('yii\\gii\\Module')
#1 /app/vendor/yiisoft/yii2/di/Container.php(358): yii\di\Container->getDependencies('yii\\gii\\Module')
#2 /app/vendor/yiisoft/yii2/di/Container.php(151): yii\di\Container->build('yii\\gii\\Module', Array, Array)
#3 /app/vendor/yiisoft/yii2/BaseYii.php(340): yii\di\Container->get('yii\\gii\\Module', Array)
#4 /app/vendor/yiisoft/yii2/base/Module.php(354): yii\BaseYii::createObject('yii\\gii\\Module', Array)
#5 /app/vendor/yiisoft/yii2/base/Application.php(304): yii\base\Module->getModule('gii')
#6 /app/vendor/yiisoft/yii2/base/Application.php(267): yii\base\Application->bootstrap()
#7 /app/vendor/yiisoft/yii2/console/Application.php(114): yii\base\Application->init()
#8 /app/vendor/yiisoft/yii2/base/Object.php(107): yii\console\Application->init()
#9 /app/vendor/yiisoft/yii2/base/Application.php(206): yii\base\Object->__construct(Array)
#10 /app/vendor/yiisoft/yii2/console/Application.php(79): yii\base\Application->__construct(Array)
#11 /app/yii(22): yii\console\Application->__construct(Array)
#12 {main}

任何人都知道解决方案吗?在本地机器上,迁移工作非常精细。

2 个答案:

答案 0 :(得分:0)

在heroku shell中运行composer install解决了问题。这真的很奇怪,因为heroku假设在上传应用程序后自动执行此操作。

答案 1 :(得分:0)

通常您不希望在制作中安装-dev内容,YII_ENV必须在'prod'web/index.php脚本中定义为yii命令本身。