Перайсці да асноўнага змесціва
Версія: 1.x

← Папярэдняя · Назад да 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();

Глядзіце таксама​