我有一个简单的PHP应用程序,我在MAMP本地开发。我确实使用了一些Composer包。它在我的本地机器上完美运行。当我使用Beanstalk App(不是AWS Beanstalk,我指的是Git托管和部署服务的Beanstalk)部署网站时,一旦在代码中引用了第一个类名,就会抛出错误。
Fatal error: Class 'User' not found in /srv/www/example.com/public_html/utilities/authenticate.php on line 8
此类特定于用于访问数据库的ActiveRecord Model类。在代码中它看起来像这样:
$user_row = User::find_by_email($theuser);
非常简单,适用于我的本地开发环境。 ActiveRecord由Composer自动加载。
然后我尝试通过sftp将应用程序部署到我的Centos VPS,令我惊讶的是,错误消失了,应用程序按预期工作。我最好的猜测是,在部署期间,Beanstalk以某种方式破坏了应用程序。因此,为了测试该理论,我在服务器上设置了一个裸Git repo,并使用post-receive钩子将repo签出到公共Apache文件夹中。这导致我遇到的与Beanstalk相同的错误。似乎问题与git部署有关。我检查了文件是否具有标准的644权限,并且文件夹设置为755.Apache拥有公用文件夹,因此所有权也不是问题。我真的不知道为什么会这样。关于此事的任何智慧都非常感激。
答案 0 :(得分:0)
尝试检查.gitignore文件。如果你在这里粘贴它的内容会更好。您确定在部署后不需要在服务器上运行composer install吗?
答案 1 :(得分:0)
我已成功解决了这个问题。这是我对ActiveRecord的错误配置。我的“用户”模型类位于名为“user.php”的文件中。使用ActiveRecord时,这是一个不正确的命名约定。由于类名以大写字母开头,因此文件名也必须以大写字母开头。通过将文件重命名为“User.php”,ActiveRecord能够正确定位该类。奇怪的是,当文档通过sftp放在服务器上时,错误的命名不是问题。我必须假设CentOS文件系统存在复杂性,我并不完全理解。我知道,与CentOS不同,OS X没有区分大小写的文件系统,这就是为什么在开发过程中从未发生此错误的原因。