Multi domain rails app. How to intelligently use MVC?

Posted by denial on Stack Overflow See other posts from Stack Overflow or by denial
Published on 2010-12-28T20:53:07Z Indexed on 2010/12/28 20:53 UTC
Read the original article Hit count: 218

Background: We have app a, b, and plan to add more apps into this same application. The apps are similar enough they could share many views, assets, and actions. Currently a,b live in a single rails app(2.3.10). c will be similar enough that it could also be in this rails app.

The problem: As we continue to add more apps to this one app, there's going to be too much case logic that the app will soon become a nightmare to maintain. There will also be potential namespace issues. However, the apps are very similar in function and layout, it also makes sense to keep them in one app so that it's one app to maintain(since roughly 50% of site look/functionality will be shared).

What we are trying to do is keep this as clean as possible so it's easy for multiple teams to work on and easy to maintain.

Some things we've thought about/are trying: Engines. Make each app an engine. This would let us base routes on the domain. It also allows us to pull out controllers, models and views for the specific app. This solution does not seem ideal as we won't be reusing the apps any time soon. And explicitly stating the host in the routes doesn't seem right.

Skinning/themes. The auth logic would be different between the apps. Each user model would be different. So it's not just a skinning problem.

In app/view add folder sitea for sitea views, siteb for siteb views and so on. Do the same for controllers and models. This is still pretty messy and since it didn't follow naming conventions, it did not work with rails so nicely and made much of the code messier.

Making another rails app. We just didn't want to maintain the same controller or view in 2 apps if they are identical.

What we want to do is make the app intelligently use a controller based on the host. So there would be a sessions controller for each app, and perhaps some parent session controller for shared logic(not needed now). In each of these session controllers, it handles authentication for that specific app. So if the domain is a.mysite.com, it would use session controller for app a and know to use app a's views,models,controllers. And if the domain is b.mysite, it would use the session controller for b. And there would be a user model for a and user model for b, which also would be determined by the domain.

Does anyone have any suggestions or experience with this situation? And ideally using rails 2.3.x as updating to rails 3 isn't an option right now.

© Stack Overflow or respective owner

Related posts about ruby-on-rails

Related posts about ruby