Idle thoughts and technical knots.

Setup Laravel queue on shared hosting

We specialise in bespoke web and mobile development at Papertank, and we’re proud to use Laravel as our PHP framework of choice on web and API projects.

When it comes to hosting a Laravel application, installing on a shared host is perfectly possible, although we normally use a more powerful VPS server for more flexibility and control. We’ve previously blogged about setting up installing Laravel on shared hosting on papertank.co.uk. If you do go down the shared hosting route, you’ll want to make sure you are using a decent web hosting company. This will save a lot of headache and make deploying custom apps much easier. We recommend Cloud Above in Cornwall for great value and support.

Modern web apps use queues for background job handling of intensive tasks, allow your API or front-end app to return data, redirect the user, or perform other actions without waiting for the ‘job’ to finish. Laravel’s driver based queue system makes this easy to set up with Beanstalkd, Amazon SQS or Redis. Unfortunately shared hosting makes using these services difficult or impossible, since your host will often forbid installing software or logging in as root.

Laravel 5’s new database driver fills in for other tools, storing the jobs on a database table – https://laravel.com/docs/5.2/queues. The next step is running or listening for jobs using the command line ‘artisan’ tool, which can be a little tricky on shared hosting without process monitors. To get around this, you can use a cron job which can usually be setup in cPanel on shared hosting, however cron jobs can only be run once per minute which isn’t ideal for high traffic websites.

As a workaround, we recently customised a Laravel web app using the built in Task Scheduler. By setting up the server’s cron to run the schedule:run command every minute, our application spawns off a new queue:listen process and checks to see if it needs restarted every 5 minutes.

/**
* Define the application's command schedule.
*
* @param IlluminateConsoleSchedulingSchedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
	$path = base_path();
	$schedule->call(function() use($path) {
		if (file_exists($path . '/queue.pid')) {
			$pid = file_get_contents($path . '/queue.pid');
			$result = exec("ps -p $pid --no-heading | awk '{print $1}'");
			$run = $result == '' ? true : false;
		} else {
			$run = true;
		}
		if($run) {
			$command = '/usr/bin/php -c ' . $path .'/php.ini ' . $path . '/artisan queue:listen --tries=3 > /dev/null & echo $!';
			$number = exec($command);
			file_put_contents($path . '/queue.pid', $number);
		}
	})->name('monitor_queue_listener')->everyFiveMinutes();
}

The full code for this setup is on Gist at https://gist.github.com/davidrushton/b7229df4c73372402fc1

If you’re looking for more help with Laravel, you should check out the following websites which we subscribe to and read regularly.

Of course, if you’re looking for a Glasgow based company with experience building advanced web apps with Laravel then please get in touch

Glasgow Life iPad Apps

This year has been a big one for us in terms of App Development. Not only have we been producing a variety of our own projects (Trivia Night and Sharpen) but we’ve had the amazing opportunity to work with some really exciting institutions.

Glasgow Life
We were fortunate enough to get to work with a selection of Glasgow’s finest museums this year, producing both in-house exhibition apps and appstore releases.

Century of Style
This beautiful exhibition of 19th-century clothing comes from Glasgow Museums’ collection of European costume. The app allows you to delve into details of each item and discover its history in greater detail, as well as zoom in on some of the finer details using high definition photography.

Century of Style – App Store Release

Scotland Street
Scotland street has always been a hub of information for the history of local schools and those that attended, but a lot of the information has been difficult to obtain.
A new push has been made to digitise a lot of the old records and photos, with a custom app being displayed on iPads throughout the museum to help suers interact with it.

Visit Scotland Street Museum for a hands on experience with the app.

Archaeology Companion
Kelvingrove Museum has always been home to a hugely impressive collection of archaeological treasures, ranging from stone age to medieval periods.

In order to bring their new exhibition to life, the museum commissioned us to produce an iPad app that would allow visitors to learn and discover interesting details about the individual items on display. Along with the detailed records, the app also allows users to zoom in on high definition imagery and even pinch, zoom and ‘spin’ detailed videos of certain objects for a closer look.

Visit the museum’s Study Centre upstairs to interact with the app in person or download free from the AppStore.

An Archaeology Companion – App Store Release

Trivia Night App for tvOS

Trivia Night App is our latest adventure into the world of Apple Operating Systems. This time with the (as yet) uncharted Apple TV.

With the new hardware’s upcoming launch announced to the world, our long time collaborator Michael from Turing came to us with the idea of creating a tvOS trivia app, that players could interact with using an iOS version on their phone or tablet, essentially creating their own personal controller.

The game allows up to 6 players to join into a points based trivia game hosted using the Apple TV. All that is required is for the users to download the free companion app onto their phone or tablet, make sure wifi or bluetooth is turned on and follow the simple instructions.

 

Zero Downtime PHP Deployments

Modern PHP Deployments

We do a lot of bespoke web application development at Papertank, and we specialise in PHP for our server-side web and API projects.

PHP has come along way, and the whole platform has matured significantly in the last 5 years. In addition to core improvements and standards initiatives, the introduction of the Composer Dependency Manager (getcomposer.org) has been instrumental in allowing developers to share and ‘require’ other open-source projects within their applications.

We use Composer on our bespoke web projects, allowing us to install, update and manage all of the packages and libraries our websites and APIs use.

The Dreaded Downtime

Inevitably all software needs updated, and updating can be a pain. We use Git version control repositories and Composer, but sometimes things go wrong, and even when they don’t they can take a website offline for several minutes while the code and database is updated.

Our Zero Downtime Solution

A few months ago, we picked up on a server technique to deploy projects with zero downtime – effectively by linking the web root directory to the most current ‘copy’ of the application / code.

Using Laravel’s Envoy Task Runner, we then developed an automated process of initialising, running and cleaning up your deployments via the command line on your local command line. Envoy runs a series of commands on your remote host and restarts your web server, effectively resulting in no downtime when deploying complex updates including database migrations and composer updates.

Our code lives on Github at https://github.com/papertank/envoy-deploy and is specifically designed for use on Laravel 5 projects. However, the idea can be expanded for any PHP or non-PHP projects, and the Envoy command line runner can be used independent of Laravel.

How it Works

Your server will look something like this after you init and then deploy with the script

20150317110501/
20150317114500/
current -> ./20150317114500
storage/
.env

 

As you can see, the current directory is symlinked to the latest deployment folder

Inside one of your deployment folders looks like the following (excluded some laravel folders for space)

app/
artisan
boostrap/
composer.json
.env -> ../.env
storage -> ../storage
vendor/

 

The deployment folder .env file and storage directory are symlinked to the parent folders in the main (parent) path.

Websites we now use this approach on have 100% uptime.

Find out More

Our GitHub project – https://github.com/papertank/envoy-deploy

Not comfortable with the command line? – https://envoyer.io is a great service that offers the same feature through a web interface

Servers For Hackers did a great video showing a similar setup in more detail – https://serversforhackers.com/video/enhancing-envoy-deployment

Are you a client interested in a no-downtime web application? Get in touch

 

Why we’re building our own e-commerce software

When it comes to building e-commerce websites, it seems like there is a never ending list of options to choose from. All you have to do is Google “Ecommerce software” to get over 25 million results, from basic off-the-shelf templates to fully fledged systems targeted at enterprise customers.

We’ve been designing and developing e-commerce websites at Papertank since we first set up shop in 2010. In that time we’ve reviewed, used and customised a variety of e-commerce systems as well as coding bits and bobs of our own to suit the project.

Top E-commerce solutions

While there is a lot of good e-commerce software around, there is also a lot of bad and ugly ones – either because of sloppy coding, very out-of-date structure, or both.

Although each project is different, we often look at the following software for each e-commerce project before recommending the best solution to our clients.

Magento

Now owned and funded by eBay, Magento is without a doubt one the most popular e-commerce solutions. Commercially, Magento costs $15k per year just for the software. However, a free open-source version is also available with the same core functionality, albeit with less features and the expectation you know exactly what you’re doing or employ a development studio (like Papertank) to set up your website.

Magento is one of the most powerful and feature rich solutions – which is both a blessing and a curse. While customising the design and structure of the website is easy with experience, adding to the functionality can be very pricey – either though purchasing bolt-on third party extensions or coding custom features from scratch. As a “heavy” system, one of Magento’s biggest complaints is also the the slow speed and steep learning curve of doing day-to-day updates and configuration.

Shopify

Unlike Magento which you download and setup on your own, Shopify is a monthly subscription service which costs from $14 and upwards to use. This means that you have to pay a monthly subscription for using the software rather than setting up on your own server / hosting.

That said, Shopify is a wonderful service and is constantly adding new features including the ability to use their software as both an online shop and a face-to-face point of sale in your brick-and-mortar store.

WordPress

A quick caveat about WordPress – it is not e-commerce software and therefore third-party plugins need to be installed to get a typical product, cart, checkout facility working. While we use WordPress as our preferred content management system at Papertank, we don’t normally recommend its use for e-commerce unless there are specific requirements or the shop component is relatively basic.

For clients, the main attraction to using WordPress is using the one interface for both adding website content and managing orders, reducing the learning curve.

Why build our own?

With so many existing e-commerce systems out there, why decide to build our own from scratch? The answer is a very simple one – flexibility.

As a bespoke web studio, our clients and projects are not only varied but are often  both complex and challenging. Given the complex nature of e-commerce development, we want our projects to meet every requirement, whether it is as basic as a comment field on each order or as complex as a weekly lottery system with direct debit or credit card payments.

Coming soon…

Our as yet un-named e-commerce software is currently being planned, designed and implemented for one of our favourite clients – the Wild Futures animal charity.

After discussing and detailing what features their new shop should have, it became clear that using an off-the-shelf system was not going to work or, at best, would require a heavy and costly amount of customisation. Our bespoke solution will handle donations, adoptions, event tickets and merchandise sales, and we look forward to working with Wild Futures on this exciting new project.

If you’re interested in chatting about how our custom e-commerce system might work for your business, please don’t hesitate to get in touch with us.