Как запустить планировщик Laravel в Google Cloud - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь запустить Laravel Планировщик в Google Cloud.

По моей команде, у меня есть это

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\User;
use Carbon\Carbon;

class ChangeRole extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:update';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'This Changes Stuffs';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        $users = User::where('trialExpires', '<=', Carbon::now())->get();
        foreach ($users as $user) {
        $user->type= 'subscriber';
        $user->save();
        }

    }
}

Я сделал это в моем Ядре

protected $commands = [
    //
    'App\Console\Commands\ChangeRole',
];

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

В моем файле cron.yaml

cron:
- description: "daily job"
  url: '* * * * * cd /project_id && php artisan command:update >> /dev/null 2>&1'
  schedule: every 24 hours
  retry_parameters:
    min_backoff_seconds: 2.5
    max_doublings: 5
  timezone: Europe/Madrid

Когда я запустил gcloud app deploy cron.yaml Я получил эту ошибку

ОШИБКА: (gcloud.app.deploy) An ошибка при разборе файла: [C: \ xampp1 \ newlibri \ cron.yaml] Невозможно присвоить значение '* * * * * cd / starlit-advice-260914 && php команда ремесленника: обновление >> / dev / null 2> & 1 'для атрибута' url ': значение' * * * * * cd / starlit-advice-260914 && php команда ремесленника: обновление >> / dev / null 2> & 1 'для URL не соответствует выражению' ^ (?: ^ /. * $) $ 'в "C: \ xampp1 \ newlibri \ cron.yaml", строка 3, столбец 8

Я не знаю, что я сделал неправильно.

Когда я запускаю команду PHP artisan: обновлять. Планировщик работает просто отлично. Но я не могу выполнить репликацию в Google Cloud

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Возможно, вы захотите использовать реализацию по умолчанию для этих задач планировщика. По сути, вы настраиваете задачу CRON, которая запускает функцию планировщика каждую минуту, и пусть код PHP решает, следует ли запускать определенные задачи.

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Это будет запускать вашу функцию app\Console\Kernel.php::schedule() каждую минуту. , в котором вы можете определить свои задачи, например:

// Example function which removes users older than a year.
$schedule->call(function () {
    User::query()
    ->where('created_at', '<', Carbon::now()->subYear())
    ->delete();
})->hourly();

См. https://laravel.com/docs/7.x/scheduling

0 голосов
/ 30 марта 2020

Мне удалось исправить ошибку.

Я должен установить URL для запроса на получение в моем приложении.

cron:
- description: "daily summary job"
  url: /api/checksub
  schedule: every 24 hours
  retry_parameters:
    min_backoff_seconds: 2.5
    max_doublings: 5
  timezone: Europe/Madrid

В моем контроллере у меня есть это

  public function checksub() {
    $users = User::where('trialExpires', '<=', Carbon::now())->update(['role'=> 'subscriber']);
      ));
}

Это не нужно настроить Laravel Планировщик. Просто позвоните, чтобы получить результат URL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...