I have three identical Laravel projects on the same server and a sperate database for queues and jobs.
Projects
- Project A
- Project B
- Project C
Databases
- Project A database
- Project B database
- Project C database
- Laravel Queue Database
The queue is always running in Project A
php artisan queue:work
I have already set the queue and job to use a single queue and I can add jobs from Project B and C to Project A queue and run it
Problems
When I want to upload or add a file it adds in Project A even if it belongs to Project B or C.
I am using
spatie roles
and permissions. When I add permissions via job it says permission not found (it checks project A).
I've searched Google and also asked ChatGPT but found very few answers which were very old.
My .env
QUEUE_CONNECTION=database
# start these belongs to queues and jobs
QUEUE_DB_HOST="localhost"
QUEUE_DB_PORT="3306"
QUEUE_DB_DATABASE="laravelqueue"
QUEUE_DB_USERNAME="userName"
QUEUE_DB_PASSWORD="UserPassword"
QUEUE_FAILED_DB_CONNECTION=queue
# end these belongs to queues and jobs
My config/database.php
'connections' => [
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => false,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'queue' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('QUEUE_DB_HOST', '127.0.0.1'),
'port' => env('QUEUE_DB_PORT', '3306'),
'database' => env('QUEUE_DB_DATABASE', 'forge'),
'username' => env('QUEUE_DB_USERNAME', 'forge'),
'password' => env('QUEUE_DB_PASSWORD', ''),
'unix_socket' => env('QUEUE_DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
],
My confiq/queue.php
return [
'default' => env('QUEUE_CONNECTION', 'sync'),
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
'after_commit' => false,
'connection' => 'queue'
],
],
'failed' => [
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
'database' => env('QUEUE_FAILED_DB_CONNECTION', 'queue_database'),
'table' => 'failed_jobs',
],
];
My job
class AppendLogToFile implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $activity;
public function __construct($activity)
{
$this->activity = $activity;
}
public function handle()
{
$date = $this->activity['date'];
$company_id = $this->activity['Company_id'];
$path = '/activities/' . $company_id . '/';
$logs = json_decode(Storage::get($path . $date . '.json'), true) ?? [];
$logs[] = (object) $this->activity;
Storage::put($path . $date . '.json', json_encode($logs));
}
}
My second job
namespace App\Jobs;
use App\Models\SystemFeatures;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Spatie\Permission\Models\Role;
class GivingPermissionJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $role;
private $permissionID;
public $tries = 50;
public function __construct($role, $permissionID)
{
$this->role = $role;
$this->permissionID = $permissionID;
$this->onQueue('high');
}
public function handle()
{
DB::setDefaultConnection(config('DB_CONNECTION'));
$this->role->givePermissionTo($this->permissionID);
}
}