最近,我创建了 Yii2 应用程序(基本模板)并成功部署到 Heroku 上。然后我想设置数据库,所以我为 heroku 应用程序添加了 postgresql 插件,并像这样配置了数据库配置:
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=prod
和 YII_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}
有人知道解决办法吗?在本地机器上迁移工作得很好。
最佳答案
通过在 heroku shell 中运行 composer install
解决了问题。这真的很奇怪,因为 heroku 应该会在上传应用程序后自动执行此操作。
关于postgresql - Yii2 迁移不适用于 Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579945/