← Папярэдняя · Назад да README · Наступная →
Генерацыя і расклад
Каб згенераваць усе актыўныя стужкі, выкарыстоўвайце кансольную каманду:
php artisan feed:generate
У выніку будуць выкананы ўсе актыўныя стужкі (is_active = true) з табліцы feeds або з табліцы, указанай у файле config/feeds.php.
Звярніце ўвагу: калі выклікаць каманду без параметра, кансоль пакажа спасылкі на ўсе стужкі, у тым ліку з уласцівасцю is_active, роўнай false.
Але такія стужкі не будуць выкананы і атрымаюць стан SKIP.
Адна стужка
Указаная стужка будзе выканана, нават калі яна адключана ў табліцы feeds базы даных.
Каб згенераваць пэўную стужку, выклічце кансольную каманду feed:generate і перадайце ёй як параметр slug стужкі з табліцы feeds:
php artisan feed:generate products
Генерацыя выбраных выходных файлаў
Для стужкі, наладжанай на асобныя выходныя файлы, slug рэгістрацыі выбірае клас стужкі, а ключ мэты — аднаго партнёра, краму, лакаль або іншы варыянт вываду.
Запуск стужкі без --target ляніва апрацоўвае targets() і генеруе ўсе мэты:
php artisan feed:generate products
Перадайце паўтаральны параметр --target, каб згенераваць толькі выбраныя мэты:
php artisan feed:generate products --target=42
php artisan feed:generate products --target=42 --target=81
Яўныя ключы выкарыстоўваюць findTarget() замест пералічэння targets(). Ключы-дублікаты апрацоўваюцца адзін раз у парадку першага з'яўлення. Усе запытаныя ключы вызначаюцца да пачатку генерацыі.
Для --target патрэбны адзін slug рэгістрацыі стужкі. Каманда адхіляе пустыя або невядомыя ключы, а таксама выбар мэты для стужкі, якая не рэалізуе HasFeedTargets.
Поўнае пералічэнне мэт выконваецца патокава, а не атамарна. Калі targets() завяршыцца памылкай пасля вяртання некалькіх значэнняў, папярэднія мэты ўжо могуць быць згенераваны або пастаўлены ў чаргу. Пусты перабіральны аб'ект нічога не генеруе і не стварае няяўную стандартную мэту.
Вывад для ШІ-агента
Калі feed:generate выконваецца ўнутры агента праграмавання са штучным інтэлектам, распазнанага Laravel Agent Detector, каманда аўтаматычна выводзіць адзін аб'ект JSON замест індыкатараў прагрэсу і фарматаваных радкоў стану. Параметр каманды не патрэбны. Па-за распазнаным агентам звычайны кансольны вывад не змяняецца.
Пры непасрэднай генерацыі для кожнай згенераванай стужкі паказваюцца ўсе апублікаваныя файлы і колькасць запісаў у іх:
{
"tool": "feed:generate",
"result": "success",
"feeds": [
{
"class": "App\\Feeds\\SitemapFeed",
"status": "generated",
"files": [
{
"path": "/var/www/html/storage/app/public/sitemap.xml",
"records": 1250
}
]
},
{
"class": "App\\Feeds\\DisabledFeed",
"status": "skipped"
}
]
}
Каманда выводзіць кампактны JSON у адзін радок. У прыкладзе ён адфарматаваны толькі для зручнасці чытання.
| Стан | Значэнне | Дадатковыя палі |
|---|---|---|
generated | Файлы стужкі згенераваны непасрэдна. | files з палямі path і records для кожнага файла |
queued | Рэжым чаргі ўключаны, і задача стужкі адпраўлена сінхронна для агента. | Няма |
skipped | Стужка неактыўная, а каманда выканана без slug стужкі. | Няма |
Кожны мэтавы запіс generated або queued таксама змяшчае поле target з выбраным ключом.
У рэжыме чаргі шлях для агента сінхронна выконвае кожную ўключаную задачу перад вяртаннем выніку JSON. Звычайны шлях з кансольным вывадам для чалавека па-ранейшаму адпраўляе задачы праз наладжанае падключэнне да чаргі.
Гэта абалонка JSON выкарыстоўваецца толькі пры паспяховым выкананні. Калі падчас генерацыі ўзнікае выключэнне, Laravel апрацоўвае памылку каманды звычайным спосабам і не выводзіць абалонку памылкі JSON.
Чарга
Стандартна генерацыя стужкі выконваецца ў кансольным працэсе. Для стужак, якія патрабуюць шмат часу або памяці, уключыце рэжым Laravel Queue у сваім асяроддзі:
FEED_QUEUE_ENABLED=true
FEED_QUEUE_CONNECTION=redis
FEED_QUEUE_NAME=feeds
FEED_QUEUE_UNIQUE_TTL=3600
Калі рэжым чаргі ўключаны, feed:generate адпраўляе па адной задачы для кожнай звычайнай актыўнай стужкі і па адной задачы для кожнай выбранай мэты мэтавай стужкі. Пры асінхронным падключэнні каманда завяршаецца пасля адпраўкі задач. Запусціце апрацоўшчык чаргі для выбраных падключэння і чаргі, каб апрацаваць гэтыя задачы.
FEED_QUEUE_CONNECTIONвыбірае падключэнне да чаргі. Калі значэнне не зададзена, выкарыстоўваеццаQUEUE_CONNECTION, а затымdatabase.FEED_QUEUE_NAMEвыбірае чаргу ў гэтым падключэнні. Не задавайце значэнне, каб выкарыстоўваць стандартную чаргу падключэння.FEED_QUEUE_UNIQUE_TTLзадае максімальны час жыцця блакіроўкі ўнікальнасці ў секундах. Звычайныя задачы ўнікальныя паводле класа стужкі. Мэтавыя задачы ўнікальныя паводле класа стужкі і ключа мэты; параметры мэты не змяняюць гэтую ідэнтычнасць.
Падключэнне sync адразу выконвае кожную задачу ў кансольным працэсе. Выберыце асінхроннае падключэнне, каб перанесці генерацыю ў апрацоўшчык. Задайце FEED_QUEUE_ENABLED=false, каб генераваць стужкі непасрэдна, без адпраўкі задач.
Расклад
Выраз пры рэгістрацыі
Пры стварэнні рэгістрацыі стужкі перадайце звычайны радок з выразам cron або аб'ект DragonCode\LaravelFeed\Scheduling\Expression з ланцужковымі выклікамі.
use App\Feeds\ProductFeed;
use DragonCode\LaravelFeed\Queries\FeedQuery;
use DragonCode\LaravelFeed\Scheduling\Expression;
app(FeedQuery::class)->create(
class: ProductFeed::class,
title: 'Products',
expression: (new Expression)
->weekly()
->mondays()
->at('13:00'),
);
У прыкладзе з ланцужковымі выклікамі захоўваецца 0 13 * * 1. Звычайныя радкі, у тым ліку псеўданімы накшталт @daily, якія падтрымлівае dragonmantank/cron-expression, па-ранейшаму можна перадаваць непасрэдна.
Даступныя метады з ланцужковымі выклікамі адпавядаюць варыянтам частаты планіроўшчыка ва ўсталяванай версіі Laravel. Актуальны спіс для Laravel 13 прыведзены ў даведніку па частаце. Даступныя толькі метады, вынік якіх можна захаваць як стабільны выраз cron з пяццю палямі. Інтэрвалы карацейшыя за хвіліну, часавыя паясы, абмежаванні па часавых інтэрвалах і lastDayOfMonth() недаступныя для гэтага аб'екта-значэння.
Аўтаматычны
Каб аўтаматызаваць генерацыю стужак, выкарыстоўвайце планіроўшчык. Для гэтага дадайце выклік дапаможнага класа ў файл routes/console.php, калі стандартны шлях не быў зменены:
use DragonCode\LaravelFeed\Helpers\ScheduleFeedHelper;
use Illuminate\Support\Facades\Schedule;
ScheduleFeedHelper::register();
Schedule::call(function () {
// ... other action
})->everySecond();
Так рэгіструюцца ўсе актыўныя стужкі паводле раскладу ў слупку expression базы даных. Запланаваная мэтавая стужка генеруе кожнае значэнне, вернутае targets().
Ручны
Расклад таксама можна задаць непасрэдна паводле ўласных правіл. У гэтым выпадку будуць выкананы толькі ўказаныя вамі стужкі.
use DragonCode\LaravelFeed\Commands\FeedGenerateCommand;
use Illuminate\Support\Facades\Schedule;
Schedule::command(FeedGenerateCommand::class, ['products'])
->withoutOverlapping()
->runInBackground()
->daily();
Schedule::command(FeedGenerateCommand::class, ['sitemap'])
->withoutOverlapping()
->runInBackground()
->hourly();
Schedule::call(function () {
// ... other action
})->everySecond();