Laravel: Caching Database Queries

If your application runs a large number of queries very often, with time it will become very, very sluggish. Here Laravel caching comes handy. Laravel provides a simple mechanism for caching these queries using a very simple chained method call. Here is an example using Laravel’s Fluent Query Builder:

Of course, we can do the same thing using Eloquent:

Behind the scene Laravel executes the query and then stores it along with the query result using the cache adapter, with an expiration time of 60 minutes. Running the same query again will result that cached query will be found, which means it will not be executed again, instead the results will be taken from the cache. Continue reading Laravel: Caching Database Queries

Setting Up Laravel Environments

Setting up a development environment is an important task you should do before starting any project. We all know that Laravel has a lot of cool features and one of things I like a lot is how easy is to set environments on your machine. Official documentation page provides you a lot of useful information about it, so make sure you check it.

Typically for each project you would need to have development, staging and production environments. All of these should be on separated servers, so configuring each environment can be a bit tricky.  But not with Laravel. Continue reading Setting Up Laravel Environments

Apache2 – mod_fcgid: HTTP request length exceeds MaxRequestLen

Few days ago I found a very good Open Source project for sharing and synchronization (Dropbox alternative) called Pydio. Heard before for this project, but I have never tried to install it before. I tried the demo and decided to install Pydio on my own server and check this little bit more. Installation procedure went smoothly and in 5 minutes I had my sharing web site ready to use.

But, when I tried to upload multiple files, all of them larger than 3Mb, browser simply returned:

Then I checked Apache2 log, and here is what I found:

It seams that MaxRequestLen directive of mod_fccgid is too low. To fix this, you need to update few options in your php.ini file. Search for upload_max_filesize which puts limit on any single file, default value should be set to this:

change this value to whatever you want, but I strongly suggest you to set >50M. Then search for post_max_size, default value is:

this is the size of the entire body of the request, which could include multiple files. Set this value at lest 2-3x as upload_max_filesize. Continue reading Apache2 – mod_fcgid: HTTP request length exceeds MaxRequestLen

Virtual hosts overlap on 443, the first has precedence

Apache2 LogoToday I got strange error on my production server when I tried to enable SSL on three domains. Since I use ISPConfig as hosting control panel I assumed it will work without problems. But I was wrong. I did little bit of research on this topic, and I found a simple solution.

If you look at /etc/apache2/ports.conf file, you will see:

This way Apache knows which virtual host to serve based on the different host names. And it works fine for *:80 port. But, for 443 port it’s disabled, so you need to update ports.conf as follows to make it work:

Make sure to restart Apache and it will work fine.

I hope this tip will save you some time.

Resources

More about Apache2 virtual hosts you can learn here. Other useful links I found while I was looking for solution:

Apache error: _default_ virtualhost overlap on port 443
Virtual hosts overlap on 443, first has precedence
VirtualHost Overlap on Port 443

 

 

Laravel Filters: Route access depending on the user group

Filters are one of the Larevel’s features that I like the most. It’s pretty straightforward – you need to run some chunk of code before or after some action. Recently I had to implement restrictions on route resources depending on user group. I use Sentry for user authentication and role management and this Laravel filter should check if user belongs to specified group and allow him access to route resource if he does.

One solution is to simply create a new filter for every group. But, I don’t like repetition. I wanted simple and elegant solution that meets my requirements, without unnecessary repetition of code. Here is solution I came up with:

Continue reading Laravel Filters: Route access depending on the user group