I used to execute tinker
on previous Amazon AMI by using this command :
sudo -E -u webapp php artisan tinker
Now I am using PHP 7.4 on Amazon Linux 2
and when I execute the above command, I get this error :
Unable to create PsySH runtime directory. Make sure PHP is able to write to /run/user/1000 in order to continue.
So, In order to test, I gave the full permission to this folder and then executed my command again :
sudo chmod 777 /run/user/1000
sudo -E -u webapp php artisan tinker
Actually, no error, but the environnement variables such as RDS_PASSWORD
or RDS_DB_NAME
are not loaded, making it impossible to perform database actions :
Psy Shell v0.10.4 (PHP 7.4.4 — cli) by Justin Hileman
>>> env('RDS_DB_NAME')
=> null
>>> User::first()
Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [2002] Connection refused
(SQL: select * from `users` limit 1)'
I also tried to echo
the variable from a shell, I got the same result :
sudo su webapp
sh-4.2$ echo $RDS_DB_NAME
# Empty here
It's not on the documentation but the environment variables are in /opt/elasticbeanstalk/deployment/env
So you can do something like this:
export $(sudo cat /opt/elasticbeanstalk/deployment/env) && sudo -E -u webapp php artisan tinker
Also, to deal with the PsySH
problem, just create a .psysh.php
file in your source code directory with that content:
<?php
return [
'runtimeDir' => './.psysh',
];
Psysh will then use that directory without any permission problem because webapp
owns it.