1

我有一个在 MAMP 本地开发的简单 PHP 应用程序。我确实使用了一些 Composer 包。它在我的本地机器上完美运行。当我使用 Beanstalk 应用程序(不是 AWS Beanstalk,我指的是 Git 托管和部署服务 Beanstalk)部署网站时,一旦在代码中引用了第一个类名,它就会引发错误。

Fatal error: Class 'User' not found in /srv/www/example.com/public_html/utilities/authenticate.php on line 8

此类特定于用于访问数据库的 ActiveRecord 模型类。在代码中它看起来像这样:

$user_row = User::find_by_email($theuser);

非常简单,可以在我的本地开发环境中使用。ActiveRecord 由 Composer 自动加载。

然后我尝试通过 sftp 将应用程序部署到我的 Centos VPS,令我惊讶的是,错误消失了,应用程序按预期工作。我最好的猜测是 Beanstalk 在部署过程中以某种方式破坏了应用程序。因此,为了测试该理论,我在服务器上设置了一个裸 Git 存储库,并使用 post-receive 挂钩将存储库检出到公共 Apache 文件夹中。这导致了我在使用 Beanstalk 时遇到的相同错误。似乎问题与 git 部署有关。我检查了文件是否具有标准的 644 权限,并且文件夹设置为 755。Apache 拥有公用文件夹,因此所有权也不是问题。我真的不知道为什么会发生这种情况。非常感谢任何关于此事的智慧。

4

2 回答 2

0

尝试检查您的 .gitignore 文件。如果你把它的内容粘贴到这里就更好了。您确定部署后不需要在服务器上运行 composer install 吗?

于 2013-06-03T15:30:03.427 回答
0

我已经设法解决了这个问题。这是我对 ActiveRecord 的错误配置。我的“用户”模型类驻留在一个名为“user.php”的文件中。使用 ActiveRecord 时,这是不正确的命名约定。由于类名以大写字母开头,因此文件名也必须如此。通过将文件重命名为“User.php”,ActiveRecord 能够正确定位该类。奇怪的是,当通过 sftp 将文档放在服务器上时,错误的命名并不是问题。我必须假设 CentOS 文件系统存在我不完全理解的复杂性。我知道与 CentOS 不同,OS X 没有区分大小写的文件系统,这就是为什么在开发过程中从未发生此错误的原因。

于 2013-06-03T23:11:11.857 回答