Rails & PHP

21 views
Skip to first unread message

Ralph Shnelvar

unread,
Apr 6, 2012, 3:53:13 PM4/6/12
to rubyonra...@googlegroups.com
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

Walter Lee Davis

unread,
Apr 6, 2012, 4:14:32 PM4/6/12
to rubyonra...@googlegroups.com

On Apr 6, 2012, at 3:53 PM, Ralph Shnelvar 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?

I've never tried this, but if you're using Passenger, it seems likely that you could add the handler directive to your Apache configuration (or maybe it would inherit the php handler stuff if the server can already host php by default) and then put the entire PHP site in the public folder. Just make sure that you don't clobber any of your routes, and it should work fine. If you're not hitting the same database with PHP and Rails, you could possibly get away with as little as that.

Walter

Jason Fleetwood-Boldt

unread,
Apr 6, 2012, 4:18:53 PM4/6/12
to rubyonra...@googlegroups.com

Yea, I would even consider keeping the existing PHP app at "www.xyz.com" and making your Rails app "services.xyz.com" or something like that

But Walter's hack might work. Alternatively there's some fancy mod_rewrite I'm sure apache will do to direct request to the right app.

But consider that PHP and Rails are mostly different technologies and you should have no expectation that they will work "together" -- what you're trying to do is a hack and probably should only be done if absolutely necessary and/or as a band-aid fix.

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

Leonardo Mateo

unread,
Apr 6, 2012, 6:55:37 PM4/6/12
to rubyonra...@googlegroups.com
On Fri, Apr 6, 2012 at 4:53 PM, Ralph Shnelvar <ral...@dos32.com> 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?
>

At the risk of going Off Topic, I would ask why on earth would you do that?
*I think* that's a terrible idea. Debugging and maintenance WILL hurt
you. Not to mention that every somebody does that kind of things a
baby Panda dies.

--
Leonardo Mateo.
There's no place like ~

Ralph Shnelvar

unread,
Apr 6, 2012, 9:59:27 PM4/6/12
to Jason Fleetwood-Boldt
Jason,

Friday, April 6, 2012, 2:18:53 PM, you wrote:


JFB> Yea, I would even consider keeping the existing PHP app at "www.xyz.com" and making your Rails app "services.xyz.com" or something like that

JFB> But Walter's hack might work. Alternatively there's some fancy mod_rewrite I'm sure apache will do to direct request to the right app.

JFB> But consider that PHP and Rails are mostly different technologies and you should have no expectation that they will work "together" -- what you're trying to do is a hack and probably should only be done if absolutely necessary and/or as a band-aid fix.


JFB> On Apr 6, 2012, at 4:14 PM, Walter Lee Davis wrote:

>>
>> On Apr 6, 2012, at 3:53 PM, Ralph Shnelvar 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?
>>
>> I've never tried this, but if you're using Passenger, it seems likely that you could add the handler directive to your Apache configuration (or maybe it would inherit the php handler stuff if the server can already host php by default) and then put the entire PHP site in the public folder. Just make sure that you don't clobber any of your routes, and it should work fine. If you're not hitting the same database with PHP and Rails, you could possibly get away with as little as that.
>>
>> Walter
>>
>> --
>> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
>> To post to this group, send email to rubyonra...@googlegroups.com.
>> To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
>> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
>>
>>


What a simple and wonderful idea! Thanks!!!

Ralph Shnelvar

Fernando Almeida

unread,
Apr 6, 2012, 10:07:29 PM4/6/12
to rubyonra...@googlegroups.com

Matt Jones

unread,
Apr 7, 2012, 3:43:46 PM4/7/12
to rubyonra...@googlegroups.com, 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

Ralph Shnelvar

unread,
Apr 7, 2012, 7:26:56 PM4/7/12
to Matt Jones

Matt,

-- 

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 rubyonra...@googlegroups.com.

To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.

For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.


This is way over my head although I have some glimpses of understanding.


I thank you for taking the time to write all this tuff.  I'll save it and cogitate when I know a lot more.



-- 

Best regards,

 Ralph                            mailto:ral...@dos32.com

Reply all
Reply to author
Forward
0 new messages