Building and Working with Static
Sites in Ruby on Rails
Ben Scofield
ben@viget.com
Senior Developer, Viget Labs




May 18...
2




Me

• 8 years building web apps (Perl, VBScript, C#,
  Java, PHP)
• Ruby and Rails for 2 years
• Tech Lead for Seth ...
3




Viget Labs

• Full-service web design and development
  consultancy
• Three types of clients
         – Flash-based ...
4




“Static” sites

• Fully static: CMS
• Small scale: About Us, Contact Info
• Large scale: ACVA (funside.com)




Vige...
5




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget Labs, LLC – www.viget.com
6




Hybrid sites

• Distinct static and dynamic content (About Us)
• Intermingled static and dynamic content




Viget L...
7




THE PROBLEM

• Building a static site should be easy




Viget Labs
we build web business



May 18, 2007           ...
8




And in PHP, it is

• Drop a file and see it run, even with embedded
  PHP code
• Use configuration files to route
  ...
9




But in Rails?

• Actions for every view? sigh
• Actionless views? pfft

• and what about page-specific data?




Vig...
10




So why bother with Rails?

• Less interesting: morale
• More interesting: productivity
         – task switching an...
11




Notes

• Error handling - ignore its absence
• Historical tour, Edge at the time




Viget Labs
we build web busine...
12




Solution 1: Rails on PHP

• Routing + Convention + Action + Caching =
  basic PHP?




Viget Labs
we build web busi...
13




Routing

• The beauty of the catch-all route:


• Declare all other routes explicitly!
  or namespace the catch-all...
14




Convention

• All templates under a single app/views
  subfolder
• Move as much to the layout as possible




Viget...
15




Action




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget Labs, LLC – www.viget...
16




Caching

• Short and sweet: caches_page :show
• Rails caches under the request URI, not the
  controlller/action


...
17




Problems with Solution #1

• Manage page data in the views? pfft
• Manually expire the cache? pfft
• No support for...
18




Solution 2: Configuratron 2000

• Use configuration files to overcome the
  problems of Solution 1




Viget Labs
w...
19




navigation.yml

• Central management for pages, page data, and
  relationships




Viget Labs
we build web business...
20




Memory’s cheap, right?

• Load it all into memory

• and pull it out when you need it




Viget Labs
we build web b...
21




Caching

• Expire the entire cache when navigation.yml is
  updated




Viget Labs
we build web business



May 18,...
22




redirects.yml

• Use the redirect entry to find the new page




Viget Labs
we build web business



May 18, 2007  ...
23




Problems with Solution #2

• Keeping it all in memory? pfft
• Upload new config files to change content? pfft
• All...
24




Solution 3: CRUDification

• So what is Rails best at?
         – CRUD!


• Can we make static sites CRUDdier witho...
25




Move it all to the DB...




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget Lab...
26




Pages and Variables




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget Labs, LL...
27




Redirects




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget Labs, LLC – www.vi...
28




Sitemaps for nothing




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget Labs, L...
29




Cascading Variables for Free




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget...
30




Web UI




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget Labs, LLC – www.viget...
31




Cache sweeping made easy




Viget Labs
we build web business



May 18, 2007            © Copyright 2007 Viget Lab...
32




Problems with Solution #3

• Search
• Portability




Viget Labs
we build web business



May 18, 2007            ©...
33




Solution 4: Feed the DB

• Store page content in the DB
• Upload files or enter content through the UI
• Search wit...
34




Reduce, Reuse, Recycle

• Package the framework for distribution




Viget Labs
we build web business



May 18, 20...
35




Question 1: To Engine or To Plugin?

• Engines
         – Cons: deprecated, people yell at you
• Plugins
         –...
36




Question 2: To Generate or To App?

• Generators
         – Pros: customized code
         – Cons: hard to update
•...
37




Plugin Applications

• Miniature Rails applications - controllers,
  models, and views
• Grant complete, self-conta...
38




Using the framework

• Install the plugin-app
• Update config files
         – environment.rb and routes.rb
       ...
39




Key Points

• The catch-all route is the best kind of magic
• Play to Rails’ strengths
• Handle both large- and sma...
40




                 Get the (alpha) framework at
                http://www.viget.com/railsconf/

                    ...
41




No questions, eh?

• Why even bother with this? Why not a CMS?
• Use content_for in the views to move more to
  the...
Upcoming SlideShare
Loading in …5
×

Building and Working With Static Sites in Ruby on Rails

10,151 views

Published on

Ben Scofield presents his solution for building web applications in Rails that contain a large chunk of static content. This approach merges the management of static content with the power that the Rails framework provides to developers.

Published in: Business, Technology
1 Comment
5 Likes
Statistics
Notes
No Downloads
Views
Total views
10,151
On SlideShare
0
From Embeds
0
Number of Embeds
46
Actions
Shares
0
Downloads
168
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide

Building and Working With Static Sites in Ruby on Rails

  1. Building and Working with Static Sites in Ruby on Rails Ben Scofield ben@viget.com Senior Developer, Viget Labs May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  2. 2 Me • 8 years building web apps (Perl, VBScript, C#, Java, PHP) • Ruby and Rails for 2 years • Tech Lead for Seth Godin’s Squidoo • ben@viget.com Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  3. 3 Viget Labs • Full-service web design and development consultancy • Three types of clients – Flash-based entertainment sites – Web 2.0 startups – Mid-sized, mostly static sites Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  4. 4 “Static” sites • Fully static: CMS • Small scale: About Us, Contact Info • Large scale: ACVA (funside.com) Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  5. 5 Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  6. 6 Hybrid sites • Distinct static and dynamic content (About Us) • Intermingled static and dynamic content Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  7. 7 THE PROBLEM • Building a static site should be easy Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  8. 8 And in PHP, it is • Drop a file and see it run, even with embedded PHP code • Use configuration files to route requests, set page-specific data, handle redirects, set page metadata... Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  9. 9 But in Rails? • Actions for every view? sigh • Actionless views? pfft • and what about page-specific data? Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  10. 10 So why bother with Rails? • Less interesting: morale • More interesting: productivity – task switching and specialization • Most interesting: hybrid sites – current and future Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  11. 11 Notes • Error handling - ignore its absence • Historical tour, Edge at the time Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  12. 12 Solution 1: Rails on PHP • Routing + Convention + Action + Caching = basic PHP? Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  13. 13 Routing • The beauty of the catch-all route: • Declare all other routes explicitly! or namespace the catch-all: Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  14. 14 Convention • All templates under a single app/views subfolder • Move as much to the layout as possible Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  15. 15 Action Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  16. 16 Caching • Short and sweet: caches_page :show • Rails caches under the request URI, not the controlller/action Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  17. 17 Problems with Solution #1 • Manage page data in the views? pfft • Manually expire the cache? pfft • No support for redirects (site revisions)? pfft Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  18. 18 Solution 2: Configuratron 2000 • Use configuration files to overcome the problems of Solution 1 Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  19. 19 navigation.yml • Central management for pages, page data, and relationships Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  20. 20 Memory’s cheap, right? • Load it all into memory • and pull it out when you need it Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  21. 21 Caching • Expire the entire cache when navigation.yml is updated Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  22. 22 redirects.yml • Use the redirect entry to find the new page Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  23. 23 Problems with Solution #2 • Keeping it all in memory? pfft • Upload new config files to change content? pfft • All-or-nothing caching? pfft • Not very Rails Wayish, is it? Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  24. 24 Solution 3: CRUDification • So what is Rails best at? – CRUD! • Can we make static sites CRUDdier without creating a full-blown CMS? Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  25. 25 Move it all to the DB... Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  26. 26 Pages and Variables Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  27. 27 Redirects Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  28. 28 Sitemaps for nothing Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  29. 29 Cascading Variables for Free Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  30. 30 Web UI Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  31. 31 Cache sweeping made easy Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  32. 32 Problems with Solution #3 • Search • Portability Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  33. 33 Solution 4: Feed the DB • Store page content in the DB • Upload files or enter content through the UI • Search with ... whatever Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  34. 34 Reduce, Reuse, Recycle • Package the framework for distribution Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  35. 35 Question 1: To Engine or To Plugin? • Engines – Cons: deprecated, people yell at you • Plugins – Pros: everybody loves plugins! Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  36. 36 Question 2: To Generate or To App? • Generators – Pros: customized code – Cons: hard to update • Plugin Applications – Pros: easy to update, fast start – Cons: possible conflicts Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  37. 37 Plugin Applications • Miniature Rails applications - controllers, models, and views • Grant complete, self-contained functionality to another application Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  38. 38 Using the framework • Install the plugin-app • Update config files – environment.rb and routes.rb – (optional) .htaccess and environment.rb • Run the migrations • Enjoy your newly more-static site! Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  39. 39 Key Points • The catch-all route is the best kind of magic • Play to Rails’ strengths • Handle both large- and small-scale static sites Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  40. 40 Get the (alpha) framework at http://www.viget.com/railsconf/ Questions? Ask ‘em now or email me at ben@viget.com Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
  41. 41 No questions, eh? • Why even bother with this? Why not a CMS? • Use content_for in the views to move more to the layout • Plugems vs. engines vs. plugins? • More about plugin-apps? Viget Labs we build web business May 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

×