任务在我的本地机器上运行,但不在生产Laravel Lumen上运行

时间:2017-10-02 19:59:57

标签: php laravel lumen

我的生产环境存在问题。在我运行我建立的命令时在我的本地机器上:

php artisan updateusers:badcustomernumbers

一切都按预期运行,没有工作失败。

当我部署并尝试运行同样的任务时,我得到:

Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined method App\Services\MiddlewareApi::get_lowest_active_customer_number_by_email() in .../app/Jobs/UpdateBadCustomerNumbersJob.php:48

这是UpdateBadCustomerNumbersJob.php:

<?php

namespace App\Jobs;

use App\AppUser;
use Illuminate\Support\Facades\Log;
use App\Subscription;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Mockery\Exception;
use App\Http\Controllers\UpdateUserController;
use App\Services\MiddlewareApi;

class UpdateBadCustomerNumbersJob extends Job
{

    /**
     * App users to update customer number for
     * @var AppUser
     */
    protected $appUsers;

    /**
     * The number of times the job may be attempted.
     *
     * @var int
     */
    public $tries = 2;

    /**
     * UpdateBadCustomerNumbersJob constructor.
     * @param $appUsers
     */
    public function __construct($appUsers)
    {
        $this->appUsers = $appUsers;
    }

    /**
     * @param UpdateUserController $updateUserController
     */
    public function handle(UpdateUserController $updateUserController)
    {
        $middlewareApi = new MiddlewareApi();
        foreach ($this->appUsers as $user) {
            $userCustomerNumber = $middlewareApi->get_lowest_active_customer_number_by_email($user->email);
            if(!is_null($userCustomerNumber) AND $userCustomerNumber !== false AND !empty($userCustomerNumber->customerNumber)) {
                $updateUserController->updateAggregateCustomerNumber($user, $userCustomerNumber, true);
                $updateUserController->updateAppDatasCustomerNumber($user, $userCustomerNumber, true);
                $updateUserController->updateSubscriptionsCustomerNumber($user, $userCustomerNumber, true);
                $updateUserController->updateAppUserCustomerNumber($user, $userCustomerNumber, true);
            } else {
                //if there is no customer number available just delete this user because they must not have any active subscriptions any longer
                $updateUserController->deleteAggregateData($user);
                $updateUserController->deleteAppDatas($user);
                $updateUserController->deleteSubscriptions($user);
                $updateUserController->deleteAppUser($user);
            }
        }
    }

}

这里是MiddlewareAPI.php:

<?php
namespace App\Services;

use Illuminate\Support\Facades\Log;
use Mockery\Exception;
use GuzzleHttp\Client;

class MiddlewareApi
{
    /**
     * @var $middlewareToken
     */
    private $middlewareToken;

    /**
     * @var $middlewareUrl
     */
    private $middlewareUrl;

    public function __construct()
    {
        $this->setMiddlewareToken(env('MIDDLEWARE_TOKEN'));
        $this->setMiddlewareUrl(env('MIDDLEWARE_BASE_URL'));
    }

    /**
     * Sets the Middleware API Token
     * @param $token
     */
    public function setMiddlewareToken( $token )
    {
        $this->middlewareToken = $token;
    }

    /**
     * Gets the Middleware API Token
     * @return mixed
     */
    public function getMiddlewareToken()
    {
        return $this->middlewareToken;
    }

    /**
     * Sets the Middleware base url
     * @param $url
     */
    public function setMiddlewareUrl( $url )
    {
        $this->middlewareUrl = $url;
    }

    /**
     * Gets the Middleware base url
     * @return mixed
     */
    public function getMiddlewareUrl()
    {
        return $this->middlewareUrl;
    }

    /**
     * Retrieves the Active subscriptions of a customer
     * based on customer number
     * @param $customerNumber
     * @return bool|mixed
     */
    public function get_customer_subscriptions_by_customer_number( $customerNumber )
    {
        $url = $this->getMiddlewareUrl() . 'sub/active/customernumber/' . $customerNumber;
        $header = ['Token' => $this->getMiddlewareToken()];
        $errorText = 'Error in get_customer_subscriptions_by_customer_number: ';

        return $this->_get($url,$header,$errorText);

    }

    /**
     * Retrieves the Active subscriptions and Products of a customer
     * @param $customerNumber
     * @return bool|mixed
     */
    public function get_customer_subscriptions_and_products_by_customer_number( $customerNumber )
    {
        $url = $this->getMiddlewareUrl() . 'data/customernumber/' . $customerNumber;
        $header = ['Token' => $this->getMiddlewareToken()];
        $errorText = 'Error in get_customer_subscriptions_by_customer_number: ';

        return $this->_get($url,$header,$errorText);
    }

    /**
     * Retrieve the lowest active customer number by email address
     * @param $email
     * @return bool|mixed
     */
    public function get_lowest_active_customer_number_by_email( $email )
    {
        $url = $this->getMiddlewareUrl() . 'customer/findlowestactivecustomernumber/emailaddress/' . $email;
        $header = ['Token' => $this->getMiddlewareToken()];
        $errorText = 'Error in get_lowest_active_customer_number_by_email: ';

        return $this->_get($url, $header, $errorText);
    }

    /**
     * Get method to make all get calls from middleware
     * @param $endpoint
     * @param $headers
     * @param $errorText
     * @return bool|mixed
     */
    public function _get($endpoint, $headers, $errorText)
    {
        $client = new Client();

        try {
            $response = $client->request('GET', $endpoint,
                ['headers' => $headers]
            );
            $responseData = json_decode($response->getBody()->getContents());
            return $responseData;
        } catch (Exception $e) {
            Log::error($errorText. $e);
            return false;
        }
    }

    /**
     * Returns data with status code in json format
     * @param $statusCode
     * @param $data
     * @return \Illuminate\Http\JsonResponse
     */
    public function apiReturnResponseInJson( $statusCode, $data )
    {
        $content = ['status' => $statusCode, 'data' => $data];
        return response()->json($content, $statusCode);
    }
}

我尝试运行composer update和php artisan cache:clear但我仍然遇到同样的错误。我甚至ssh并且在MiddlewareApi.php中出现了get_lowest_active_customer_number_by_email方法。

任何想法可能是什么问题?

0 个答案:

没有答案