Мне нужна помощь в создании приложения Yii2 Advanced на Heroku. Я уже установил Yii локально с помощью Composer, следуя их руководству точно: http://www.yiiframework.com/doc-2.0/guide-tutorial-advanced-app.html
Мой сайт работает так, как должен локально, с интерфейсом и бэкэнд:
http://localhost/yii2app/frontend/web/ http://localhost/yii2app/backend/web/
Когда я нажимаю его и запускаю на 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') );
Если это связано с «../../», чтобы сменить каталог, я бы подумал, что первое требование будет иметь ошибку (для записи main.php).
Что мне не хватает, чтобы запустить Yii2 на Ироку?
UPDATE – я создал новое базовое приложение Yii2. Должно работать и быть простым, поэтому я подумал. По-видимому, даже основное приложение не работает на Heroku. Там ДОЛЖНО быть чем-то, что осталось от документов, где-то … Использовал композитор для установки Yii2 basic, поставил его под git, подтолкнул его к новому стекю герою. Пошел, чтобы проверить мое приложение на heroku, добавив /web/index.php в конец URL-адреса.
ReflectionException Class yii\debug\Module does not exist
Затем я помещаю index.php в корневой каталог, содержащий phpinfo (). Я могу подтвердить, что получаю отчет по phpinfo. Итак, php работает, он сообщает PHP 5.6.5.
Кажется, что Yii2 и Heroku не играют хорошо без каких-либо магических (и не документированных) трюков. Я искал, искал и искал, и я ничего не могу с этим поделать. Я не могу быть единственным, кто пытается получить приложение Yii на Heroku.
Поэтому я попробовал CloudControl. Я развернул мое основное приложение Yii2 для облачного управления, снова получаю отчет phpinfo на корневой index.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 будет лучше, по крайней мере, запустить его для PoC, но Yii из коробки не будет работать ни на одной из этих служб. Что- то не упоминается, что я пропал без вести.
Наконец, после нескольких часов и часов, я понял это. Ну, у меня остался еще один вопрос, который мне нужно проверить (и повторить попытку). Тем не менее, мне удалось получить и основные приложения yii basic, и yii, запущенные на Heroku. Тем не менее, все еще были ошибки в CloundControl, но это еще один день.
Мне не хватает 2 записей в моем файле composer.json. Я не знаю, почему они не включены в документацию Yii, если они требуются для производства. Вот мой блок require (мне не нужно было редактировать раздел require-dev, просто требуется):
"fxp/composer-asset-plugin": "*", "ext-gd": "*"
Плагин для композитора был абсолютно необходим. Расширение GD необходимо для страницы контакта с нами (я предполагаю, что captcha). Я также прокомментировал первые 2 строки в web / index.php для определения YII_DEBUG. Как только я это сделал, обновил композитор, обновил git и нажал, волшебство произошло 🙂
Я не думаю, что они сообщают вам, что вам нужно отредактировать web / index.php, чтобы удалить их в документах Yii2. Кажется, они заинтересованы только в том, чтобы заставить вас развиваться. Да, файл индекса имеет комментарии, но нам нужно знать, чтобы посмотреть там! Если вы не удалите их, Yii загрузит ваши инструменты отладки, которых не существует. Я предполагаю, что когда Heroku получает толчок, он запускает композитор из блока «require».
Что касается шаблона Advanced, то в файлах Frontend и Backend index.php уже есть константы отладки, подходящие для dev и production. Вам просто нужно запустить php init --env=Production --overwrite=All
на сервере (я не мог получить героку, чтобы сделать это, но еще один день). В документах 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 в производство, моих файлов просто не было.
Простое исправление, чтобы заставить меня работать на Heroku с Yii Advanced (включая добавление 2 упомянутых пакетов в composer.json): я удалил все файлы gitignore, запустил init, выбрав производство, обновил git и нажал на герою. Это работает 🙂
Теперь мне нужно выяснить, как заставить init сделать это для меня, поэтому мне не нужно удалять файлы gitignore.
Что касается этого вопроса, он решается. Heroku может использовать Yii2 basic и advanced. Самая большая проблема, которую я вижу, – это документы Yii, не имеющие необходимых композиционных пакетов для запуска в производстве. Поэтому я задаюсь вопросом, нужно ли только Хероку этим пакетам …