Laravel background jobs

C++ JAVA
User avatar
teroristd
Много Редовен
Много Редовен
Reactions: 0
Posts: 1775
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd »

Да командата си работи.

[php]
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
'App\Console\Commands\UpdateResources'
];

/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('update:resources')->everyMinute();
}

/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__ . '/Commands');

require base_path('routes/console.php');
}
}
[/php]
User avatar
Revelation
Web-tourist
Web-tourist
Reactions: 1
Posts: 958
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 68

Post by Revelation »

Работи като я използваш ръчно от артизана или тръгна като цяло?

Също като извикаш

[php]
php artisan schedule:run
[/php]

ръчно, тръгва ли?
User avatar
teroristd
Много Редовен
Много Редовен
Reactions: 0
Posts: 1775
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd »

И по двата начина се изпълнява.
User avatar
Revelation
Web-tourist
Web-tourist
Reactions: 1
Posts: 958
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 68

Post by Revelation »

Всичко е наред значи?
User avatar
teroristd
Много Редовен
Много Редовен
Reactions: 0
Posts: 1775
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd »

:D не в смисъл командата работи, но се изпълнява един път. Явно трябва да мисля нещо друго. Имам VMware на лаптопа. Дали ще свърши някаква работа?
User avatar
Revelation
Web-tourist
Web-tourist
Reactions: 1
Posts: 958
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 68

Post by Revelation »

teroristd wrote::D не в смисъл командата работи, но се изпълнява един път. Явно трябва да мисля нещо друго. Имам VMware на лаптопа. Дали ще свърши някаква работа?
Между другото, използвай така task scheduler-а и ще се оправи.
schtasks /create /sc minute /mo 1 /tn "Laravel Scheduler" /tr "php C:\xampp\htdocs\Game\artisan schedule:run"
Сега го тествах и проверих логовете и разбрах защо не се получава.
Така написан скеджълъра си работи идеално при мен.

П.П. Оказа се, че schedule:run си разпознава операционната система и си добавя нужните параметри след това. За това е нужно само да си се вика schedule:run.
User avatar
teroristd
Много Редовен
Много Редовен
Reactions: 0
Posts: 1775
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd »

Revelation wrote:
teroristd wrote::D не в смисъл командата работи, но се изпълнява един път. Явно трябва да мисля нещо друго. Имам VMware на лаптопа. Дали ще свърши някаква работа?
Между другото, използвай така task scheduler-а и ще се оправи.
schtasks /create /sc minute /mo 1 /tn "Laravel Scheduler" /tr "php C:\xampp\htdocs\Game\artisan schedule:run"
Сега го тествах и проверих логовете и разбрах защо не се получава.
Така написан скеджълъра си работи идеално при мен.

П.П. Оказа се, че schedule:run си разпознава операционната система и си добавя нужните параметри след това. За това е нужно само да си се вика schedule:run.
Благодаря, и при мен работи. Сега трябва да се върна към схемата която ми изпрати, и да продължа към следващата част на задачката :) .
User avatar
teroristd
Много Редовен
Много Редовен
Reactions: 0
Posts: 1775
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd »

Горе долу схванах картинката, само не разбрах как да стартирам втората задача при клик от юзъра?
User avatar
Revelation
Web-tourist
Web-tourist
Reactions: 1
Posts: 958
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 68

Post by Revelation »

Правиш си Queue Job(UpdateResourcesPerMin), който ъпдейтва resources_per_min, като в контролера ще му подаваш user_id.

Правиш си един контролер, който приема като параметър коя сграда е пусната. Да речем:

[php]
class BuildingController extends Controller {
public function build(Building $building) {
UpdateResourcesPerMin::dispatch([
'user_id' => app()->user()->id,
'mine' => $building // за да знаеш кое поле да обновиш
])->delay(now()->addMinutes($building->getDuration()));
}
}
[/php]

и в рутера да речем можеш да използваш GET или POST в зависимост как си изградиш нещата.

[php]
Route::get('/build/{building}', 'BuildingController@build');
[/php]

и следователно

[html]
<a href="{{ url('build', ['building' => 'gold']) }}">Build Gold Mine</a>
[/html]

Нещата съм ги написал просто образно. Доста неща ще трябва да обмислиш как да ги направиш, като например Building $building какво трябва да е, за да взимаш правилната сграда/ферма и да взимаш правилните данни, като getDuration().

Но се надявам, че хвана картинката как да извикаш queue-то.
User avatar
teroristd
Много Редовен
Много Редовен
Reactions: 0
Posts: 1775
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd »

Да горе долу схванах :), но ще се стартира ли Queue-то ако викам dispatch извън Scheduler-а? Питам защото четох че за да стартираш Queue трябва да подадеш команда php artisan queue:work.
Post Reply