在Heroku上设置Yii2 Advanced

Wad*_*ade 10 php heroku yii2

我需要一些帮助在Heroku上设置Yii2高级应用程序.我已经使用Composer在本地安装了Yii,完全遵循他们的指南:http://www.yiiframework.com/doc-2.0/guide-tutorial-advanced-app.html

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

http://localhost/yii2app/frontend/web/
http://localhost/yii2app/backend/web/
Run Code Online (Sandbox Code Playgroud)

当我推送它并在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
Run Code Online (Sandbox Code Playgroud)

在'frontend/web/index.php'中是Yii的股票代码(第12行是main-local.php):

$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../common/config/main.php'),
require(__DIR__ . '/../../common/config/main-local.php'),
require(__DIR__ . '/../config/main.php'),
require(__DIR__ . '/../config/main-local.php')
);
Run Code Online (Sandbox Code Playgroud)

如果它与'../../'改变目录有关,那么我认为第一个要求会有错误(对于main.php条目).

为了让Herii上的Yii2高级运行,我错过了什么?

更新 - 我创建了一个新的Yii2基本应用程序.应该工作和简单,所以我想.显然,甚至基本的应用程序也不能在Heroku上运行.必须在文档中遗漏某些东西......使用作曲家来安装Yii2 basic,将它放在git下,将其推送到新的heroku堆栈.去看看我的应用程序在heroku上,将/web/index.php添加到网址的末尾.

ReflectionException
Class yii\debug\Module does not exist
Run Code Online (Sandbox Code Playgroud)

然后我将index.php放在包含phpinfo()的根目录中.我可以确认我收到了phpinfo报告.所以php正在运行,它报告PHP 5.6.5.

看起来像Yii2和Heroku在没有一些神奇(并且没有记录)的技巧的情况下表现不佳.我搜索,搜索和搜索,我找不到任何关于此的内容.我不可能是唯一一个试图将Yii应用程序放到Heroku上的人.

所以我尝试了CloudControl.我将我的股票Yii2基本应用程序部署到cloudcontrol,我再次获得了根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
Run Code Online (Sandbox Code Playgroud)

是什么赋予了!我可以在本地运行这个很好.当我将它推送到基于云的主机(Heroku或CloudControl)时,它会失败!我认为yiibasic应用程序会更好,至少让它运行PoC,但Yii开箱即用,不会运行这两种服务.还有一些我没想到的东西.

Wad*_*ade 11

经过几个小时的乱七八糟的努力,我想通了.好吧,我还有一个问题需要测试(并再试一次).但是,我设法在Heroku上运行yii basic和yii高级应用程序.但是仍然在CloundControl上出现错误,但那是另一天.

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

"fxp/composer-asset-plugin": "*",
"ext-gd": "*"
Run Code Online (Sandbox Code Playgroud)

作曲家资产插件是绝对必需的.联系我们页面需要GD扩展(我假设验证码).我还在web/index.php中注释了YII_DEBUG定义的前两行.一旦我这样做,更新的作曲家,更新的git,并推,魔术发生:)

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

至于高级模板..前端和后端index.php文件已经具有正确的开发和生产的调试常量.你只需要php init --env=Production --overwrite=All在服务器上运行(我无法让heroku这样做,但另一天).Yii文档让你运行init,然后选择开发.这将从"environment/dev"文件夹中获取所有内容,并在应用中的位置覆盖它们.这在开发时会失败.因此,您必须将其切换到生产环境,从而将生产文件移至使用状态.我理解为什么你会有这些,所以我明白了..就像我说的,我试过heroku run bash,然后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上运行(包括将2个提到的包添加到composer.json):我删除了所有gitignore文件,运行init选择生产,更新git,并推送到heroku.它运行:)

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

至于这个问题,它已经解决了.Heroku可以运行Yii2基本和高级.我看到的最大问题是Yii文档缺少必要的编写器包才能在生产中运行.所以我想知道这只是Heroku需要那些包裹......

  • 伙计,你刚救了我的一天. (2认同)