【问题标题】:Laravel artisan tinker from Amazon Linux 2 (Elastic Beanstalk)来自 Amazon Linux 2 (Elastic Beanstalk) 的 Laravel 工匠修补匠
【发布时间】:2023-03-17 18:30:01
【问题描述】:

我曾经使用此命令在以前的 Amazon AMI 上执行 tinker

sudo -E -u webapp php artisan tinker

现在我正在使用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.

所以,为了测试,我给了这个文件夹的完全权限,然后再次执行我的命令:

sudo chmod 777 /run/user/1000
sudo -E -u webapp php artisan tinker

其实没有报错,只是RDS_PASSWORDRDS_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)'

我也尝试从 shell 中 echo 变量,我得到了相同的结果:

sudo su webapp
sh-4.2$ echo $RDS_DB_NAME
  # Empty here

【问题讨论】:

  • 你在哪里设置了这些环境变量?
  • 因为是EB环境,有AWS自动提供给服务器的实例,无需手动设置。
  • 这里有一些信息:docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 我使用 Laravel,所以我使用 env('RDS_XXX') 而不是 $_SERVER 来访问它们,但这非常相似。
  • @Marc 我也面临同样的问题,我找不到问题所在。如果您找到了解决方法,请告诉我。
  • @realnsleo 这就是我悬赏的原因。我浏览了整个互联网,没有找到任何相关的内容。

标签: php laravel amazon-web-services amazon-elastic-beanstalk tinker


【解决方案1】:

不在文档中,但环境变量在/opt/elasticbeanstalk/deployment/env

所以你可以这样做:

export $(sudo cat /opt/elasticbeanstalk/deployment/env) && sudo -E -u webapp php artisan tinker

另外,要处理PsySH 问题,只需在您的源代码目录中创建一个包含该内容的.psysh.php 文件:

<?php

return [
    'runtimeDir'    => './.psysh',
];

然后,Psysh 将使用该目录而不会出现任何权限问题,因为 webapp 拥有它。

【讨论】:

  • 谢谢克莱尔!然而,我遇到了一个问题,上面没有转义存储在/opt/elasticbeanstalk/deployment/env 中的包含空格的值,因此,我的命令对我的应用程序使用不同的环境变量。关于如何解决这个问题的任何建议?
猜你喜欢
  • 2018-06-26
  • 2019-03-05
  • 2017-05-26
  • 1970-01-01
  • 2015-04-21
  • 2021-03-29
  • 2021-06-12
  • 2016-12-06
  • 2017-12-24
相关资源
最近更新 更多