Running Artisan Commands in Envoyer

Written By Jesse Schutt
Posted on

Introduction

Along with the launch of the new Zaengle.com we’ve been working on a Laravel app that collects statistics from a variety of sources related to our work & life as ZaengliansTM. As the number of stats have increased, we needed a way to condense this data into an easy-to-read format. I bumped into the following problem as I was working on the section of code that aggregates the statistics.

TL;DR

Make sure to exit out of your current path, and re-enter it in order to get the latest symlinked release code OR you can avoid navigating into the current directory at all by running the command like this: php current/artisan stats:recount-all.


Backstory

Earlier this morning I was attempting to run an artisan command while ssh'ed into my Forge box. I'm using Envoyer to deploy this project, so I had logged in to the server, and typed cd current to move into my current deployment. I ran my artisan command php artisan stats:recount-all and noticed a problem with the code.

After fixing it locally, committing and pushing it to Bitbucket I waited a few minutes for Envoyer to auto-deploy it to Forge.

Once the deployment was done, I hit php artisan stats:recount-all to trigger the command again. Gah! My fix didn't work.


So I attempted to dig deeper into the code locally to try and find out what wasn't working. All my tests passed with the changes, and I confirmed that the command was working on my local machine.

Still no dice on the Forge box though.

I pulled a copy of the remote DB and ran the command locally again. It worked just fine.

Maybe it was a casing issue? I know servers can be picky about mixing upper/lowercase, so I double checked and couldn't find anything that looked strange.

Finally I completely disabled a portion of the code that would have to throw an error if it were executed. I pushed that to my repo and after confirming Envoyer had deployed it, ran the command through the terminal. STILL NO ERROR. Grr.

Then it occurred to me... Envoyer keeps a few past deployments in a directory called releases and only symlinks the latest release to the current directory. I wondered if maybe my terminal path wasn't updated and the current directory I was in wasn't actually the latest release.

cd ../

cd current

php artisan stats:recount-all

Bingo! It worked!