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)