最近,我创建了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=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}
任何人都知道解决方案吗?在本地机器上,迁移工作非常精细。
答案 0 :(得分:0)
在heroku shell中运行composer install
解决了问题。这真的很奇怪,因为heroku假设在上传应用程序后自动执行此操作。
答案 1 :(得分:0)
通常您不希望在制作中安装-dev
内容,YII_ENV
必须在'prod'
和web/index.php
脚本中定义为yii
命令本身。