Yii2 迁移不适用于 Heroku
Yii2 migration does not work on Heroku
最近,我创建了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
然后 运行ning 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}
有人知道解决这个问题的方法吗?在本地机器上迁移工作得很好。
问题由 运行 composer install
在 heroku shell 中解决。这真的很奇怪,因为 heroku 应该会在上传应用程序后自动执行此操作。
通常你不想在生产中安装 -dev
东西,YII_ENV
必须在 web/index.php
和 [=14= 中都定义为 'prod'
] 脚本命令本身。
最近,我创建了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
然后 运行ning 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}
有人知道解决这个问题的方法吗?在本地机器上迁移工作得很好。
问题由 运行 composer install
在 heroku shell 中解决。这真的很奇怪,因为 heroku 应该会在上传应用程序后自动执行此操作。
通常你不想在生产中安装 -dev
东西,YII_ENV
必须在 web/index.php
和 [=14= 中都定义为 'prod'
] 脚本命令本身。