Publicando um app com Symfony 4 no Heroku

Desde que comecei a trabalhar com programação, aprendi muito sobre frameworks. Antes, costumava fazer todos os códigos ‘na mão’, achando que essa era a maneira correta e que não havia como dar errado. Depois, embarquei em um projeto usando CodeIgniter 3 (que, conforme fui descobrir depois, já estava bem defasado, com a versão 4 ainda em desenvolvimento), o qual está em produção até hoje.

Nesse meio tempo, migrei uma API de Silex para Symfony 4. O processo de adaptação foi relativamente simples e, como me senti confortável e vi a necessidade de atualizar o framework, resolvi migrar o projeto que estava em CI3 para SF4.

Para testar, existem duas opções: o servidor embutido do PHP ou publicar o app em algum ambiente de teste. Como eu venho testando o Heroku a algum tempo (foi o único lugar onde consegui criar uma conta sem precisar de um cartão de crédito), decidi testá-lo lá.


Publicando o app

Não vou entrar nos méritos da instalação do Symfony e do Heroku, pois essas informações já estão extensivamente documentadas em toda a web. Vou focar nos passos que precisei seguir para fazer o app funcionar.

Esses passos devem ser seguidos antes de enviar o código para o Heroku, caso contrário o commit será recusado.

Defina o ambiente

O Symfony precisa saber em qual ambiente ele está rodando, pois alguns recursos somente ‘aparecem’ em ambiente de desenvolvimento. Dessa forma, o primeiro passo é definir a variável APP_ENV. Isso pode ser feito de duas formas: pelo dashboard do app no Heroku ou pela linha de comando:

heroku config:set APP_ENV=prod

Defina o Procfile

Além de definir a variável de ambiente, é preciso dizer ao servidor qual é a raiz do app. No caso do Symfony 4, é a pasta /public/. Para fazer isso, crie um arquivo chamado Procfile (sem extensão e com o P em maiúsculo mesmo) na raiz do projeto e copie o seguinte conteúdo para ele:

web: $(composer config bin-dir)/heroku-php-apache2 public/

Agora, o servidor saberá onde está a raiz do app.

Configure o .htaccess

Esse passo é necessário para que as rotas do Symfony funcionem, caso contrário somente a rota principal (“/”) irá funcionar. Execute o seguinte comando:

composer require symfony/apache-pack (sem o Symfony Flex)
composer require apache-pack (com o Symfony Flex)

Agora, as rotas irão funcionar corretamente.

Enviar o código!

Por fim, o mais importante de tudo, enviar o seu código para o Heroku. O código agora deverá ser compilado normalmente e seu app irá funcionar como deveria.

E foi assim, depois de muito procurar, que consegui finalmente publicar sem maiores dores de cabeça um app com Symfony 4 no Heroku.