Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Heroku上的安装程序Yi2高级_Php_Heroku_Yii2 - Fatal编程技术网

Php Heroku上的安装程序Yi2高级

Php Heroku上的安装程序Yi2高级,php,heroku,yii2,Php,Heroku,Yii2,我需要一些帮助在Heroku上设置Yii2高级应用程序。我已经使用Composer在本地安装了Yii,完全遵循他们的指南: 我的网站在本地正常工作,前端和后端: http://localhost/yii2app/frontend/web/ http://localhost/yii2app/backend/web/ 当我推它并在Heroku上运行它时,我会收到错误,抱怨找不到一些文件。奇怪的是,我的Heroku应用程序有一个bash终端,我可以验证文件是否确实存在!Heroku不喜欢“../..

我需要一些帮助在Heroku上设置Yii2高级应用程序。我已经使用Composer在本地安装了Yii,完全遵循他们的指南:

我的网站在本地正常工作,前端和后端:

http://localhost/yii2app/frontend/web/
http://localhost/yii2app/backend/web/
当我推它并在Heroku上运行它时,我会收到错误,抱怨找不到一些文件。奇怪的是,我的Heroku应用程序有一个bash终端,我可以验证文件是否确实存在!Heroku不喜欢“../../”更改目录吗

PHP Fatal error:  require(): Failed opening required '/app/frontend/web/../../common/config/main-local.php'  
include_path='.:/app/.heroku/php/lib/php') in /app/frontend/web/index.php on line 12
“frontend/web/index.php”中是Yii的股票代码(第12行是main local.php):

如果必须使用“../../”来更改目录,那么我认为第一个require将出现错误(对于main.php条目)

在Heroku上运行Yii2 advanced需要什么

更新-我创建了一个新的Yii2基本应用程序。我想,应该工作简单。显然,即使是基本的应用程序也不能在Heroku上运行。文件里肯定有什么遗漏,在某处。。。使用composer安装Yi2Basic,将其放在git下,并将其推送到新的heroku堆栈中。在heroku上查看我的应用程序,在url末尾添加/web/index.php

ReflectionException
Class yii\debug\Module does not exist
然后我将index.php放在包含phpinfo()的根目录中。我可以确认我收到了phpinfo报告。所以php正在运行,它报告PHP5.6.5

似乎Yii2和Heroku如果没有一些魔法(和未记录的)把戏就不会玩得很好。我找了,找了,找了,找了,我找不到关于这个的任何东西。我不可能是唯一一个尝试在Heroku上安装Yii应用程序的人

所以我尝试了云控制。我将我的股票Yi2Basic应用程序部署到cloudcontrol,再次在root index.php上得到一个phpinfo报告。导航到/web/index.php并获取错误:

Invalid Parameter – yii\base\InvalidParamException
The file or directory to be published does not exist: /srv/www/code/vendor/bower/jquery/dist

什么给你!我可以在本地很好地运行它。当我将它推送到基于云的主机(Heroku或CloudControl)时,它失败了!我认为yiibasic应用程序最好至少在PoC上运行,但Yii开箱即用,不会在这两种服务上运行。有一件事我没有提到。经过一个又一个小时的胡闹,我终于明白了。嗯,我还有一个问题需要测试(然后再试一次)。然而,我成功地在Heroku上运行了yii basic和yii advanced应用程序。虽然CloundControl仍然有错误,但那是另一天的事了

我的composer.json文件中缺少2个条目。如果在生产中需要,我不知道为什么这些不包括在Yii文档中。这是我的require块(我不必编辑requiredev部分,只需require):

composer资产插件是绝对必需的。联系我们页面需要GD扩展名(我假设是验证码)。我还注释掉了web/index.php中YII_调试定义的前两行。一旦我这么做了,更新了composer,更新了git,并按下按钮,神奇的事情发生了:)

我不认为他们会告诉您需要编辑web/index.php来删除Yii2文档中的web/index.php。看来他们只对你的发展感兴趣。是的,索引文件有注释,但我们需要知道如何查看!如果不删除它们,Yii将加载不存在的调试工具。我假设当Heroku收到推送时,它从“require”块运行composer

至于高级模板。。前端和后端index.php文件已经具有适用于开发和生产的调试常量。您只需在服务器上运行
phpinit--env=Production--overwrite=All
(我无法让heroku这样做,改天再做)。Yii文档让您运行init,然后选择development。这将获取“environments/dev”文件夹中的所有内容,并覆盖它们在应用程序中的位置。在开发过程中,这将失败。因此,您必须将其切换到生产,这将使您的生产文件投入使用。我明白你为什么会有这些,所以我明白了。。就像我说的,我试着运行bash,然后从apps目录运行php init--env=Production--overwrite=All,但似乎没有成功。因此,我的应用程序缺少frontend/web/index.php文件,以及更多文件

我想知道为什么“frontend/web/index.php”甚至不在目录中,但进一步检查,我发现许多目录都有gitignore文件。因此,当您将“git-push-heroku-master”、“frontend/web/index.php”和其他文件一起使用时,千万不要被推送,因为它们会被忽略。所以,因为我无法让Heroku将Yii的init运行到生产环境中,所以我的文件就不存在了

简单的修复让我用Yii-Advanced在Heroku上运行(包括将上面提到的两个包添加到composer.json):我删除了所有gitignore文件,运行init选择产品,更新git,并推送到Heroku。它运行:)

现在我需要弄清楚如何让init为我做这件事,这样我就不必删除gitignore文件了


至于这个问题,已经解决了。Heroku可以运行Yii2 basic和advanced。我看到的最大问题是Yii文档缺少在生产中运行所需的composer包。所以我想知道是不是Heroku需要这些包裹…

伙计,你刚刚救了我一天。非常感谢。也救了我一天!以下是如何在生产服务器上使用Yii2调试模块(尽管不建议使用):在
composer.json
中,根据需要移动
yiisoft/Yii2 Debug
包。此外,您可能需要移动
yiisoft/yii2 gii
Invalid Parameter – yii\base\InvalidParamException
The file or directory to be published does not exist: /srv/www/code/vendor/bower/jquery/dist
"fxp/composer-asset-plugin": "*",
"ext-gd": "*"