2015-02-01 4 views
10

Мне нужна помощь в создании расширенного приложения Yii2 на Heroku. Я уже установил Yii локально с помощью Composer, следуя их руководство точно: http://www.yiiframework.com/doc-2.0/guide-tutorial-advanced-app.htmlНастройка Yii2 Advanced на Heroku

Мой сайт работает как надо локально, с внешним и внутренним:

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 

В 'фронтэнда/веб/index.php' шток код Yii (в строке 12 является главной 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 продвинутый ход на Heroku?

ОБНОВЛЕНИЕ - Я создал новое базовое приложение 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 из коробки не будет работать ни на одной из этих служб. Существует что-то не указано, что я отсутствует.

ответ

11

Наконец, после нескольких часов и часов, я понял это. Ну, у меня остался еще один вопрос, который мне нужно проверить (и повторить попытку). Тем не менее, мне удалось получить и основные приложения yii basic, и yii, запущенные на Heroku. Тем не менее, все еще были ошибки в CloundControl, но это еще один день.

Мне не хватало 2 записей в моем файле composer.json. Я не знаю, почему они не включены в документацию Yii, если они требуются для производства. Вот мой требуется блок (у меня не было, чтобы отредактировать раздел требует-DEV, просто требуется):

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

композитор плагин актив был абсолютно необходим.Расширение GD необходимо для страницы контакта с нами (я предполагаю, что captcha). Я также прокомментировал первые 2 строки в web/index.php для определения YII_DEBUG. Как только я это сделал, обновил композитор, обновил git и нажал, произошла магия :)

Я не думаю, что они сообщают вам, что вам нужно отредактировать web/index.php, чтобы удалить их в документах Yii2. Кажется, они заинтересованы только в том, чтобы заставить вас развиваться. Да, файл индекса имеет комментарии, но нам нужно знать, чтобы посмотреть там! Если вы не удалите их, Yii загрузит ваши инструменты отладки, которых не существует. Я предполагаю, что когда Heroku получает толчок, он запускает композитор из блока «require».

Что касается расширенного шаблона .. У файлов 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, не имеющие необходимых композиционных пакетов для запуска в производстве. Так что я задаюсь вопросом, нужно ли только Хероку этим пакетам ...

+2

Человек, ты только что спас свой день. – Prostakov

+0

Большое спасибо. Спас мой день тоже! – Nedim

+0

Вот как вы можете использовать модуль отладки Yii2 на рабочем сервере (хотя это не рекомендуется): В вашем 'composer.json' переместите пакет' yiisoft/yii2-debug', который требуется. Кроме того, возможно, вам нужно будет переместить 'yiisoft/yii2-gii'. – Nedim

Смежные вопросы