在 Heroku 上设置 Yii2 Advanced

Setup Yii2 Advanced on Heroku

我需要一些帮助来在 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/

当我在 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):

$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')
);

如果必须用 '../../' 来更改目录,那么我认为第一个 require 会出错(对于 main.php 条目)。

要在 Heroku 上获得高级 Yii2 运行ning,我缺少什么?

更新 - 我创建了一个新的 Yii2 基本应用程序。应该工作并且简单,所以我想。显然,即使是基本的应用程序也不会 运行 在 Heroku 上。文档中一定有遗漏的东西,某处...使用 composer 安装 Yii2 basic,将其放在 git 下,将其推送到新的 heroku 堆栈。去查看我在 heroku 上的应用程序,将 /web/index.php 添加到 url.

的末尾
ReflectionException
Class yii\debug\Module does not exist

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

似乎 Yii2 和 Heroku 没有一些神奇的(和未记录的)技巧就不能很好地发挥作用。我已经搜索了,搜索了,搜索了,我找不到任何关于这个的东西。我不可能是唯一一个尝试将 Yii 应用程序移植到 Heroku 上的人。

所以我尝试了 CloudControl。我将现有的 Yii2 基本应用程序部署到 cloudcontrol,我再次在根目录 index.php 上获得 php 信息报告。导航到 /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 应用程序至少可以更好地获得它 运行ning 用于 PoC,但是开箱即用的 Yii 不会 运行 在这些服务中的任何一个上。有东西 没有提到我丢失了。

经过数小时的折腾,我终于弄明白了。好吧,我还有一个问题需要测试(然后再试一次)。然而,我设法在 Heroku 上获得了 yii 基本和 yii 高级应用程序 运行ning。虽然在 CloundControl 上仍然有错误,但那是另一天的事。

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

"fxp/composer-asset-plugin": "*",
"ext-gd": "*"

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

我不认为他们会通知您需要编辑 web/index.php 以在 Yii2 文档中删除它们。似乎他们只对让您继续发展感兴趣。是的,索引文件有注释,但我们需要知道去那里看!如果你不删除它们,Yii 将加载你不存在的调试工具。我假设当 Heroku 收到推送时,它 运行s 来自 "require" 块的作曲家。

至于高级模板.. 前端和后端 index.php 文件已经具有适用于开发和生产的调试常量。您只需要在服务器上 运行 php init --env=Production --overwrite=All (我无法让 heroku 执行此操作,但改天再说)。 Yii 文档让您 运行 初始化,然后 select 开发。这会从 "environments/dev" 文件夹中获取所有内容,并覆盖它们在您应用中的位置。这在开发时会失败。因此,您必须将其切换到生产环境,这会将您的生产文件投入使用。我明白你为什么会有这些,所以我明白了。就像我说的,我尝试了 heroku run bash,然后 运行ning php init --env=Production --overwrite=All 来自应用程序目录,但它似乎没有开关。所以我的应用程序缺少前端/web/index.php 文件,还有很多。

我想知道为什么 'frontend/web/index.php' 甚至不在目录中,但进一步检查我发现许多目录都有 gitignore 文件。因此,当您 'git push heroku master'、'frontend/web/index.php' 与其他人一起时,永远不会被推送,因为它们被忽略了。所以因为我无法让 Heroku 运行 Yii 的 init 投入生产,所以我的文件不在那里。

让我在 Heroku 上使用 Yii Advanced 运行 的简单修复(包括将提到的 2 个包添加到 composer.json):我删除了所有 gitignore 文件,运行 初始化选择生产,更新 git,并推送到 heroku。它 运行s :)

现在我需要弄清楚如何让 init 为我执行此操作,这样我就不必删除 git忽略文件。

至于这个问题,已经解决了。 Heroku 可以 运行 Yii2 基础和高级。我看到的最大问题是 Yii 文档缺少生产中 运行 所必需的作曲家包。所以我想知道是否只有 Heroku 需要这些包...