Configuração Yii2 Avançada em Heroku

Estou precisando de alguma ajuda para configurar um Yii2 Advanced Application no Heroku. Eu já instalei Yii usando Composer, seguindo seu guia exatamente: http://www.yiiframework.com/doc-2.0/guide-tutorial-advanced-app.html

Meu site funciona como deveria localmente, com frontend e backend:

http://localhost/yii2app/frontend/web/ http://localhost/yii2app/backend/web/ 

Quando eu empurrá-lo e executá-lo no Heroku, recebo erros reclamando que alguns arquivos não foram encontrados. O que é estranho, é com um terminal bash para o meu aplicativo Heroku, posso verificar se o arquivo está de fato lá! Heroku não está gostando do ‘../../’ para mudar o diretório?

 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 

Em ‘frontend / web / index.php’ é o código de stock de Yii (a linha 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') ); 

Se tivesse que ver com o ‘../../’ para mudar o diretório, então eu pensaria que o primeiro requerer teria um erro (para a input main.php).

O que estou faltando para que o Yii2 avançasse em execução no Heroku?

UPDATE – Eu criei um novo aplicativo básico Yii2. Deve funcionar e ser simples, então pensei. Aparentemente, mesmo o aplicativo básico não é executado no Heroku. Deve haver algo excluído do docs, em algum lugar … O compositor usado para instalar o Yii2 basic, colocá-lo sob o git, o empurrou para uma nova pilha de heroku. Fui ver o meu aplicativo no heroku, adicionando /web/index.php ao final da url.

 ReflectionException Class yii\debug\Module does not exist 

Posto então index.php no diretório raiz contendo phpinfo (). Posso confirmar que recebo um relatório phpinfo. Então, o PHP está funcionando, ele relata PHP 5.6.5.

Parece que Yii2 e Heroku não jogam bem sem alguns truques mágicos (e não documentados). Procurei, procurei e procurei, e não consigo encontrar nada sobre isso. Eu não posso ser o único a tentar obter um aplicativo Yii em Heroku.

Então eu tentei o CloudControl. Eu implantei meu aplicativo básico Yii2 basic para cloudcontrol, novamente recebo um relatório phpinfo na raiz index.php. Navegue para /web/index.php e obtenha erros:

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

O que da! Eu posso executar isso localmente bem. Quando eu empurro para um host baseado em nuvem (Heroku ou CloudControl), ele falha! Achei que o aplicativo yiibasico seria melhor, pelo menos, executá-lo para PoC, mas Yii fora da checkbox, não será executado em nenhum desses serviços. Há algo que não foi mencionado que estou faltando.

   

Finalmente, depois de horas e horas de brincar, descobri. Bem, ainda tenho uma pergunta que preciso testar (e tentar novamente). No entanto, consegui obter tanto o yii básico e as aplicações avançadas do yii que funcionam no Heroku. Ainda tenho erros no CloundControl, porém isso é para outro dia.

Faltava 2 inputs no meu arquivo compositor.json. Não sei por que isso não está incluído na documentação Yii se eles são necessários na produção. Aqui está o meu bloco exigente (eu não precisei editar a seção require-dev, apenas exigir):

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

O plugin de resources do compositor era absolutamente necessário. A extensão GD é necessária para a página de contato em contato (eu suponho que o captcha). Eu também comentei as primeiras 2 linhas na web / index.php para o YII_DEBUG define. Uma vez que fiz isso, atualizado compositor, atualizado git, e empurrado, a magia aconteceu 🙂

Eu não acho que eles informam que você precisa editar a web / index.php para removê-los nos documentos Yii2. Parece que eles só estão interessados ​​em fazer você ir para o desenvolvimento. Sim, o arquivo de índice tem comentários, mas precisamos saber para olhar para lá! Se você não os remover, Yii irá carregar suas ferramentas de debugging, que não existem. Eu suponho que quando Heroku recebe o empurrão, ele corre compositor do bloco “exigir”.

Quanto ao modelo avançado … Os arquivos do frontend e backend index.php já possuem as constantes de debugging corretas para o dev e a produção. Você só precisa executar o php init --env=Production --overwrite=All no servidor (não consegui fazer o heroku para fazer isso, mas outro dia). O Yii docs você executou init, em seguida, selecione o desenvolvimento. Isso leva tudo da pasta “ambientes / dev” e substitua-os em suas localidades em seu aplicativo. Isso falhará quando em desenvolvimento. Então, você deve transformá-lo em produção, o que move seus arquivos de produção para uso. Eu entendo por que você teria isso, então eu entendo … Como eu disse, tentei o heroku run bash , então executando o php init --env=Production --overwrite=All do diretório de aplicativos, mas não pareceu fazer o interruptor. Então, meu aplicativo estava faltando o arquivo frontend / web / index.php e muitos mais.

Eu estava pensando como ‘frontend / web / index.php’ não estava nem no diretório, mas uma inspeção adicional eu vi que muitos diretórios possuem arquivos gitignore. Então, quando você git push heroku master ‘,’ frontend / web / index.php ‘, juntamente com o resto, nunca seja pressionado porque eles são ignorados. Então, porque eu não conseguiria que o Heroku executasse o lançamento de Yii na produção, meus arquivos simplesmente não estavam lá.

Correção simples para me fazer correr no Heroku com o Yii Advanced (incluindo a adição dos 2 pacotes mencionados ao composer.json): exclui todos os arquivos do gitignore, executei init escolhendo a produção, o git atualizado e empurrado para o heroku. Funciona 🙂

Agora eu preciso descobrir como começar a fazer isso por mim, então eu não preciso excluir os arquivos do gitignore.

Quanto a esta questão, está resolvido. Heroku pode executar o Yii2 básico e avançado. O maior problema que vejo é que os documentos do Yii não possuem pacotes de compositores necessários para serem executados em produção. Então, eu me pergunto se é apenas Heroku precisar desses pacotes …