Ruby on Rails Saturday, April 7, 2012



On Friday, 6 April 2012 15:53:13 UTC-4, RalphShnelvar wrote:

I am inheriting a legacy PHP website and I want to add a few Rails pages.

Is there anyone who can recommend some info on how to add RoR to a PHP-driven website?

Ralph Shnelvar


Depends on what you mean by "PHP-driven" - if it's doing its own URL rewriting (Wordpress's clean URLs, for instance) you're probably best served putting the Rails stuff on a subdomain or in a subdirectory.

On the other hand, if it's a plain PHP site where URLs just end in .php everywhere, you can do some mod_rewrite magic (tune the paths as appropriate):

  RewriteCond /home/web/public_html/%{REQUEST_URI} -f
  RewriteRule ^(.*) /home/web/public_html/$1 [QSA,L]
  RewriteCond /home/web/public_html/%{REQUEST_URI}/index.php -f
  RewriteRule ^(.*) /home/web/public_html/$1/index.php [QSA,L]

Then point your DocumentRoot to the public dir in your Rails app, as Passenger's instructions indicate, and add this:

  <Directory /home/web/public_html>
    PassengerEngine off
   </Directory>

to the Apache config as well, to avoid confusing Passenger with stuff in PHP-land. The result will be that any incoming URL which matches either an actual PHP file, or a directory with an index.php file will be handled by PHP, while everything else goes to the Rails app.

One other thing - for additional integration, you may want to access the PHP session from the Rails app. (Going the other way is NOT recommended, as you'd need to be able to un-Marshal Ruby objects in PHP) To do this, you'll need a gem like php-serialize (https://github.com/jqr/php-serialize) and you'll need to find where your particular PHP installation stores session data - sometimes this is in /tmp, sometimes elsewhere. The files are typically named after the session token (found in "cookies['PHPSESSID']" in your controllers). PHP does some locking to avoid multiple writers messing the whole thing up, but I've only ever needed to *read* from the PHP session, so I'm not sure exactly how that works.

Hope this helps!

--Matt Jones

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/FAV9sfY553sJ.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

No comments:

Post a Comment