Laravel 在生产中以编程方式从 web.php 调用 artisan 命令
Laravel programatically calling artisan command from web.php in production
我有以下路线:
Route::get('/beneficiaries/seed', function () {
echo "<p>Database seeding started...</p>";
$exitCode = Artisan::call('db:seed');
echo "<p>Database seeding completed.</p>";
});
在我的本地环境中,当我访问“/beneficiaries/seed”时,它会为数据库播种。但如果我在生产中做同样的事情,它不会。我刚刚复制了播种机 类 和路由文件。
数据库播种器:
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(BeneficiariesTableSeeder::class);
}
}
BeneficiariesTableSeeder:
class BeneficiariesTableSeeder extends Seeder
{
public function run()
{
//seeding logic...
}
}
为什么我的生产 Artisan 命令没有被执行? (我没有使用过数据库事务。即使 w/o 它,本地数据库也会被播种,因为没有引发错误。)
当您在生产环境中 运行 php artisan db:seed
时,会出现一个警告,询问您是否确定要在生产环境中对数据库进行播种。
此生产中的警告确认是 Artisan::call('db:seed')
无法在生产中工作的原因。
要避免警告,您可以像这样使用 --force
标志:php artisan db:seed --force
.
解决方案
要在代码中执行相同的操作,请使用 Artisan::call('db:seed', ['--force' => true]);
我有以下路线:
Route::get('/beneficiaries/seed', function () {
echo "<p>Database seeding started...</p>";
$exitCode = Artisan::call('db:seed');
echo "<p>Database seeding completed.</p>";
});
在我的本地环境中,当我访问“/beneficiaries/seed”时,它会为数据库播种。但如果我在生产中做同样的事情,它不会。我刚刚复制了播种机 类 和路由文件。
数据库播种器:
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(BeneficiariesTableSeeder::class);
}
}
BeneficiariesTableSeeder:
class BeneficiariesTableSeeder extends Seeder
{
public function run()
{
//seeding logic...
}
}
为什么我的生产 Artisan 命令没有被执行? (我没有使用过数据库事务。即使 w/o 它,本地数据库也会被播种,因为没有引发错误。)
当您在生产环境中 运行 php artisan db:seed
时,会出现一个警告,询问您是否确定要在生产环境中对数据库进行播种。
此生产中的警告确认是 Artisan::call('db:seed')
无法在生产中工作的原因。
要避免警告,您可以像这样使用 --force
标志:php artisan db:seed --force
.
解决方案
要在代码中执行相同的操作,请使用 Artisan::call('db:seed', ['--force' => true]);