What would be a reasonable and logical directory into which to deploy my production Rails apps on a Linux system?

Some candidates...

/var/rails  <= There's a /var/www so this would be consistent with that 
               pattern. But I.T. guys have complained about stuff in /var 

/home/my_home_dir/rails  <= OK, not /var, but I'm not the only developer. 
                            Seems like it really ought to be a systemwide

/home/rails  <= I don't know. That just seems weird.

/rails  <= Seems even weirder.

What is the least astonishing, most normal thing to do here?

(Background info -- a Rails app is a bunch of server side code written in Ruby along with a public dir containing JavaScript, CSS, and maybe a little HTML. The public dir is mapped to an Apache vhost. Apache handles the Ruby code through a module called Passenger or mod_rails.)

Thanks for the help, all. I think I'm going to go with /opt/deployed_rails_apps. (I like long, expository directory names, and tab completion.) /var/... is also a good place, but I've gotten stern grumbling from I.T. when I tried to deploy stuff there. If it were my own machine I might go with /var or /srv.

  • You may want to see this other related question: serverfault.com/questions/29129/…
    – chmeee
    Jul 8, 2009 at 20:53
  • a side question but still related i was working on a rails project contained in the ~/Documents/quotes (directory) and after deploying it, found much to my surprise some 6 months later, that the identical folder structure is also in /var/www/html/quotes - when deploying does rails copy it to the var folder? I have no idea how it all got there from the other directory. any help would be appreciated
    – BenKoshy
    Feb 1, 2016 at 5:15

6 Answers 6


I think /opt would be the place for an application like this. I agree with following the FHS as suggested by chmeee, but I don't agree that a Rails app is a service per se.

  • It's difficult to tell, actually the rails software is isntalled in the system somewhere (as a gem or package), what he wants to place is the directory structure for the 'service', the actual application that uses rails to serve something.
    – chmeee
    Jul 8, 2009 at 20:52
  • I recognized he's talking about an app he's created (hence, "a Rails app"), rather than Rails itself. Either way, /srv seems wrong.
    – Argalatyr
    Jul 8, 2009 at 21:49

You may want to follow the Filesystem Hierarchy Standard (FHS) and place it in

/srv : Data for services provided by this system


I wouldn't place it in /opt:

/opt : Add-on application software packages

It's purpose says:

/opt is reserved for the installation of add-on application software packages.

A package to be installed in /opt must locate its static files in a separate /opt/ or /opt/ directory tree, where is a name that describes the software package and is the provider's LANANA registered name.

I don't think a developed application is a 'software package'.

The rationale for /srv is

This main purpose of specifying this is so that users may find the location of the data files for particular service, and so that services which require a single tree for readonly data, writable data and scripts (such as cgi scripts) can be reasonably placed.

I understand that a rails app is a cgi script and should be placed in /srv.

  • I wouldn't be too fanatical about what the FHS says. The most important thing is to keep your custom packages away from the operating system files. And the best places for that are "/usr/local" and "/opt".
    – Andrioid
    Jul 9, 2009 at 21:48
  • 1
    I'm not fanatical, but I like their filesystem organization. In any case I agree that /usr/local and /opt are good for software packages, but I don't think that a rails app is a software package
    – chmeee
    Jul 9, 2009 at 22:28
  • 1
    Based on what the FHS says, /srv seems like the most fitting directory to me. I'm using /srv/rails/application_name. Mar 15, 2014 at 18:47

On CentOS Linux distributions (and subsequently RedHat), when you install the httpd package (for Apache 2), it creates /var/www, and expects that your vhosts point to your web content here. The default vhost is typically dumped in /var/www/htdocs, and subsequent sites/apps should be put in /var/www/sitename.

The actual location shouldn't matter much, but it's common to see /opt/www/sitename, /var/www/sitename, or simply /opt/www or /var/www.

You've already stated a few of the reasons why some of the other locations (like /home) are not really suited for this.

Personally, I prefer /var/www/sitename since it's friendly to Apache and Rails, and is system-wide.

  • 1
    Web apps should go in /var/www, especially if they are served through something like a proper webserver like Apache of Lighttpd. The more so, since SELinux policies will be properly applied to a Rails app in /var/www and not in /opt.
    – wzzrd
    Jul 9, 2009 at 11:04

I usually put them in /opt/app_name.


In debian/ubuntu based system such applications are usually installed in /usr/share folder (i.e. /usr/share/ruby), since they are non-compiled files (which would go into /usr/lib). Since your application is not a standard application you would probably put it in /usr/local/share preventing it there being overwritten by any system updates.

/opt is certainly also a possibility here.


I keep my deploys in


The arguments:

Home will contain all the moving parts of a single website. If I have more websites I will know where to find them.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .