Setting up a mixed PHP/Ruby on Rails Dev Environment
Posted by Vince Wadhwani on Mar 17, 2006
I've been doing some work with Ruby on Rails on my Archlinux system. Recently, I accidentally messed up that system and had to reinstall my tools all over again. I took the time to write some of that process down in hopes that it may help others who want to develop and deploy both Ruby on Rails (RoR) and PHP on the same machine.
On Archlinux you will need to get the following packages via pacman.
pacman -S mysql lighttpd phpmyadmin fcgi php-cgi ruby rubygems
Note that the Archlinux community repo will be needed to grab all of those packages. In my opinion the community repo is essential and should be enabled on every Arch box though not by default.
Once you have the above package downloaded and installed (should happen automagically) you will need to grab rails by typing the now famous command:
gem install rails --include-dependencies
That should grab all the packages you need for rails including the action packs.
Now, let's modify the php.ini file found in /etc/ using your favorite editor. Ahem, vi, ahem.
vi /etc/php.ini
Find this line:
# cgi.fix_pathinfo=0
Uncomment it and change it to true:
cgi.fix_pathinfo=1
Save your work and let's move on to the lighttpd.conf file
vi /etc/lighttpd/lighttpd.conf
The first thing I do is to move the document root for lighttpd to someplace I like it. It's purely a matter of taste so do as you will, only keeping in mind that if you move your document root you will also need to move the phpmyadmin pages that were installed by pacman.
Mine looks like this:
server.document-root = "/home/httpd/html/"
The tricky part is getting lighttpd to host multiple domains whether they are PHP, Ruby on Rails, or static HTML. For simplicty I'm going to post my entire lighttpd.conf file here. Take special notice of the mods that are required!
Now you're ready to roll with both Rails (test your code via webbrick) and PHP (make sure you start MySQL and lighttpd using the /etc/rc.d/mysqld start and /etc/rc.d/lighttpd start commands)
Later I'll post how I have my Debian server hosting PHP and RoR sites all with lighttpd.
Special thanks to Ezra for his help in creating this conf file.
You can directly download my lighttpd.conf file here. I use it to get the power of both phpMyAdmin and Ruby on Rails at the same time. Hope it helps!
# lighttpd configuration file
#
# use it as a base for lighttpd 1.0.0 and above
#
###Options you really have to take care of ###
## modules to load
# at least mod_access and mod_accesslog should be loaded
# all other module should only be loaded if really neccesary
# - saves some time
# - saves memory
server.modules = (
"mod_rewrite",
"mod_redirect",
# "mod_alias",
"mod_access",
# "mod_cml",
# "mod_trigger_b4_dl",
# "mod_auth",
# "mod_status",
# "mod_setenv",
"mod_fastcgi",
"mod_proxy",
# "mod_simple_vhost",
# "mod_evhost",
# "mod_userdir",
# "mod_cgi",
"mod_compress",
# "mod_ssi",
# "mod_usertrack",
# "mod_expire",
# "mod_secdownload",
# "mod_rrdtool",
"mod_accesslog" )
## a static document-root, for virtual-hosting take look at the
## server.virtual-* options
server.document-root = "/home/httpd/html/"
## where to send error-messages to
server.errorlog = "/var/log/lighttpd/error.log"
# files to check for if .../ is requested
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" )
$HTTP["host"] == "localhost.localdomain" {
server.document-root = "/home/httpd/html/"
server.indexfiles = ( "index.php", "index.html")
fastcgi.server = (".php" =>
("localhost" =>
("socket" => "/tmp/phpadmin.socket",
"bin-path" => "/usr/bin/php-cgi -c /etc/php.ini",
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "32",
"PHP_FCGI_MAX_REQUESTS" => "5000"
)
)))
}
## set the event-handler (read the performance section in the manual)
# server.event-handler = "freebsd-kqueue" # needed on OS X
# mimetype mapping
mimetype.assign = (
".pdf" => "application/pdf",
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".gz" => "application/x-gzip",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tar.gz" => "application/x-tgz",
".tgz" => "application/x-tgz",
".tar" => "application/x-tar",
".zip" => "application/zip",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".asc" => "text/plain",
".c" => "text/plain",
".cpp" => "text/plain",
".log" => "text/plain",
".conf" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv",
".bz2" => "application/x-bzip",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar"
)
# Use the "Content-Type" extended attribute to obtain mime type if possible
#mimetype.use-xattr = "enable"
## send a different Server: header
## be nice and keep it at lighttpd
# server.tag = "lighttpd"
#### accesslog module
accesslog.filename = "/var/log/lighttpd/access.log"
## deny access the file-extensions
#
# ~ is for backupfiles from vi, emacs, joe, ...
# .inc is often used for code includes which should in general not be part
# of the document-root
url.access-deny = ( "~", ".inc" )
$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}
##
# which extensions should not be handle via static-file transfer
#
# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
######### Options that are good to be but not neccesary to be changed #######
...snip
## to help the rc.scripts server.pid-file = "/var/run/lighttpd.pid"