Это проект Laravel. У меня есть хост разработки на машине Windows (XAMPP) и хост производства / тестирования на Ubuntu (Digital Ocean). Когда я запускаю свою команду на своем локальном хосте, она не жалуется, но ничего не происходит. Та же самая команда на производственном сервере работает как шарм. Логика команды включает в себя множество функций по созданию HTTP-запросов, получению ответов и сохранению их в базе данных. Подключения к базе данных правильные с обеих сторон. Любые идеи? Спасибо!
Упрощенный командный файл
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Http\Request;
use App\PageEngagedUsers;
class MinuteTasks extends Command
{
protected $signature = 'tasks:min';
protected $description = 'Does One-Minute Tasks';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$this->Update();
}
public function Update()
{
$allPages = Page::all();
foreach ($allPages as $page) {
try {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://someurl.com/info?fields=values&featire=1&token=' . $page->token,
CURLOPT_USERAGENT => 'Codular Sample cURL Request'
));
$response = curl_exec($curl);
curl_close($curl);
\Log::info($response);
\Log::info(json_encode($response));
$obj = json_decode($response);
$value = $obj->{'data'}[0]->{'values'}[1]->value;
$pageEngagedUsers = new PageEngagedUsers;
$pageEngagedUsers->value = $value;
$page->pageEngagedUsers()->save($pageEngagedUsers);
}
catch (\Exception $e) {
}
}
}
}
Бревно
local.INFO:
local.INFO: false
\Log::info($response) ничего не дает.
\Log::info(json_encode($response)) дает ложь.
Используются ли какие-нибудь переменные, содержащие путь? Windows использует обратную косую черту. Хотя ошибки должны быть в лог-файле.
Спасибо за ответы! Если вы имеете в виду файл журнала storage \ logs, он не показывает ничего, связанного с выполнением этой команды. Я имею в виду, что он вообще не регистрирует это действие. @Tpojka Нет, пути не используются.
Очистите файл журнала и повторите попытку. Вы можете поместить \Log::info("Artisan command executed."); в начало метода и проверить, сохранен ли он в журнале.
@Tpojka Да, это было зарегистрировано. Ошибок нет.
Затем опубликуйте код своего файла Artisan. Проблема должна быть там.
@Tpojka добавил код. Может быть проблема с завитками?
Вы пропустили главное, что могло помочь вам отладить ошибку. В блоке захвата установлен \Log::info($e->getMessage());. Перед этим очистите файл журнала и сделайте еще один звонок.
@Tpojka Спасибо! В журнале написано: «Попытка получить свойство не-объекта», так что это действительно проблема скручивания. Я попытался записать ответ, но ничего не выдает.
Удалите весь код после curl_close в блоке try и запишите $response или json_encode($response) (если сначала не работает). Ответ должен быть чем-то вроде, но, вероятно, в следующих строках его структура плохо просматривается / обрабатывается. И если все еще проблема, отредактируйте свой вопрос, разместив $response, если это возможно.
@Tpojka Пробовал и редактировал мои вопросы. Спасибо.
Также попробуйте удалить весь код после функции curl_close(). Оставьте только ведение журнала без каких-либо действий, которые должны быть предприняты из ответа curl. Попробуйте решать одну задачу за раз. Тестовый запрос / ответ API с помощью Postman (или браузера; рекомендуется всегда использовать Postman): что эта ссылка дает вам за пределами Laravel, значения жесткого кода и проверка (https://someurl.com/info?fields=values&featire=1&token=' . $page->token).






Журнал проверил?