Htaccess Redirects, Rails Single Resource Routing, PHP APC Installation, OH MY!

In addition to a helpful 404 page, sometimes its nice when you re-engineer an entire major site to check out the top pages from the old site and do some manual redirects in your .htaccess.

Redirect 301 /old-url http://www.domain.com/new-url

Routing for a Singleton Resource on Rails 2 (re-printed from http://www.expressionlab.com/2008/7/14/routing-for-a-singleton-resource-on-rails-2)

While developing your RESTful Rails application, you use ActionController::Resources which magically generates a bunch of named routes to use in controllers and views.

For example, adding the following line to your config/routes.rb:

map.resources :products

gives you these paths: products_path, product_path(id), new_product_path and edit_product_path(id).

If your resource is a singleton one, you should simply do this:

map.resource :store

However, when you try to navigate to the edit action (/store/edit) you will get an error like this:

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.to_sym

from the line that says in your view.

I’ve discovered that there is already an open ticket for this issue. The problem is that Rails still assumes a collection resource. To fix this, you need to explicitly add the path to the form_for helper:

<% form_for(@store, :url => store_path) do |f| %>

Also, you will need to do the same in your update action:

redirect_to(store_path)

Now, if you are like me, you may try to use a singular name for your controller (StoreController). Now, you should get the next error:

uninitialized constant StoresController

Who mentioned StoresController?!

Well, Rails did! As documented here, the default controller name is still taken from the plural name.

To solve this, just add the controller name to your route:

map.resource :store, :controller => 'store'

Now, everything should work fine.

By the way, I have found a patch that allows scaffold generator to produce singleton resources: http://dev.rubyonrails.org/ticket/8832. But I didn’t try it yet. Anyone did?


Installing PHP APC on GNU/Linux Ubuntu Gutsy Gibbon 7.10 (and Debian) (re-printed from http://2bits.com/articles/installing-php-apc-gnulinux-ubuntu-gutsy-gibbon-710-and-debian.html

Complex PHP applications, such as Drupal, can gain a lot of performance benefits from running a PHP op-code cache/accelerators.

APC, Alternate PHP Cache, is now the most maintained free/open source op-code cache, and is being used more and more as it emerges to be the most stable.

The instructions here detail how to get APC running on an Ubuntu server running Gutsy Gibbon 7.10.

First, we need the pecl command so we can download and install APC from the repositories.

Do to so, we execute the following command:

aptitude install php-pear  

But, this will not run on its own, we need the following package for the phpize command:

aptitude install php5-dev  

We also need the apxs command, which is installed via the following package:

aptitude install apache2-dev 

Now we have all the software we need, so we install apc via the pecl command:

pecl install apc 

Once that finishes, we need to enable apc in Apache’s configuration. the following command should do this for us.

echo "extension=apc.so" > /etc/php5/apache2/conf.d/apc.ini 

Then we restart Apache:

/etc/init.d/apache2 restart

And we are all done. Watch for less execution time per page, and decreased memory usage per Apache process compared to what you had before.