Mar*_*arc 7 php amazon-web-services laravel amazon-elastic-beanstalk tinker
我曾经tinker使用以下命令在以前的 Amazon AMI 上执行:
sudo -E -u webapp php artisan tinker
Run Code Online (Sandbox Code Playgroud)
现在我正在使用PHP 7.4 on Amazon Linux 2,当我执行上述命令时,出现此错误:
Unable to create PsySH runtime directory. Make sure PHP is able to write to /run/user/1000 in order to continue.
Run Code Online (Sandbox Code Playgroud)
所以,为了测试,我给了这个文件夹的完全权限,然后再次执行我的命令:
sudo chmod 777 /run/user/1000
sudo -E -u webapp php artisan tinker
Run Code Online (Sandbox Code Playgroud)
实际上,没有错误,但是诸如RDS_PASSWORD或之类的环境变量RDS_DB_NAME未加载,因此无法执行数据库操作:
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)'
Run Code Online (Sandbox Code Playgroud)
我还尝试echo从 shell 访问变量,我得到了相同的结果:
sudo su webapp
sh-4.2$ echo $RDS_DB_NAME
# Empty here
Run Code Online (Sandbox Code Playgroud)
小智 10
它不在文档中,但环境变量在/opt/elasticbeanstalk/deployment/env
所以你可以做这样的事情:
export $(sudo cat /opt/elasticbeanstalk/deployment/env) && sudo -E -u webapp php artisan tinker
Run Code Online (Sandbox Code Playgroud)
另外,为了解决这个PsySH问题,只需.psysh.php在你的源代码目录中创建一个包含该内容的文件:
<?php
return [
'runtimeDir' => './.psysh',
];
Run Code Online (Sandbox Code Playgroud)
然后 Psysh 将使用该目录而没有任何权限问题,因为webapp它拥有它。