PHP应用程序在使用Git部署时会中断,如果通过sftp部署,则工作正常

PHP应用程序在使用Git部署时会中断,如果通过sftp部署,则工作正常,php,git,deployment,phpactiverecord,Php,Git,Deployment,Phpactiverecord,我有一个简单的PHP应用程序,我在MAMP本地开发。我确实使用了一些作曲家软件包。它在我本地的机器上运行得很好。当我使用Beanstalk应用程序(不是AWS Beanstalk,我指的是Git托管和部署服务Beanstalk)部署网站时,一旦代码中引用了第一个类名,它就会抛出一个错误 Fatal error: Class 'User' not found in /srv/www/example.com/public_html/utilities/authenticate.php on line

我有一个简单的PHP应用程序,我在MAMP本地开发。我确实使用了一些作曲家软件包。它在我本地的机器上运行得很好。当我使用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由作曲家自动录制


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

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

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

我们可以获得git状态输出吗?您确定从git复制了正确的代码吗?看起来你没有复制正确的代码。因此,请检查您是否使用预期的代码创建了正确的标记。检查您正在使用的分支。@aledujke sure:#在分支上主控无需提交(工作目录清理)@Perry我正在使用主分支。我甚至登录到服务器,所有适当的php文档都在公共web目录中。有没有可能忘记初始化子模块?My.gitignore:只有/.DS\u存储。我对composer的安装也有同样的想法,但无论composer软件包是在git repo中,还是在git中忽略它们并在服务器上运行composer安装,都是相同的问题。真奇怪。