Laravel在生产中通过编程从web.php调用artisan命令

Laravel在生产中通过编程从web.php调用artisan命令,php,laravel,laravel-artisan,laravel-5.6,Php,Laravel,Laravel Artisan,Laravel 5.6,我有以下路线: Route::get('/beneficiaries/seed', function () { echo "<p>Database seeding started...</p>"; $exitCode = Artisan::call('db:seed'); echo "<p>Database seeding completed.</p>"; }); 受益人表种子商: class DatabaseSeeder

我有以下路线:

Route::get('/beneficiaries/seed', function () {
    echo "<p>Database seeding started...</p>";
    $exitCode = Artisan::call('db:seed');
    echo "<p>Database seeding completed.</p>";
});
受益人表种子商:

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->call(BeneficiariesTableSeeder::class);
    }
}
class BeneficiariesTableSeeder extends Seeder
{
    public function run()
    {
        //seeding logic...
    }
}

为什么我的production Artisan命令无法执行?(我没有使用数据库事务。即使没有使用它,也会对本地数据库进行种子设定,因为不会引发错误。)

在生产环境中运行
php artisan db:seed
时,会出现一条警告,询问您是否确定要在生产环境中为数据库进行种子设定

生产中的此警告确认是
Artisan::call('db:seed')
在生产中不起作用的原因

为了避免警告,可以使用
--force
标记,如:
php-artisan-db:seed--force

解决方案


要在代码中执行同样的操作,请使用
Artisan::call('db:seed',['--force'=>true])

生产
环境中播种是“安全的”我想,您是否尝试过在
生产
环境中通过CLI运行artisan命令?这是一种暂存环境,因此,我没有对生产服务器的shell访问权限:(您是否尝试在stg环境中检查您的日志文件?是的,其中没有任何内容。很好的技术回答,但在我看来,这里的真正答案可能是“嘎!不要这样做!”我不希望谷歌对我的网站进行爬网,不经意间在网站上植入大量数据。我完全同意@ceejayoz在生产中这样做通常是不好的做法,但在我们了解更多之前不能说太多。也许有一种中间件可以避免某些“管理员”角色用户来执行此操作。或者,此路由被列为IP白名单,以便其他某个应用程序在“关键”情况下调用。谢谢,我今晚将尝试此解决方案并回来。(Y)