Guide to Rails Metal 157

Posted by mikong on February 03, 2009

  Writing a Rails Metal app can make you realize just how spoiled we’ve become with all the convenience that comes with Rails. Without the controller and view helpers, it can become a painful experience. Here’s a guide to help make it a better experience.

For this guide, we’re writing a Widget Refresher Metal app. Supposedly, the widget page of our Rails application gets called too much, and so we want to take advantage of Metal. Under our project’s app/metal folder, we create refresher.rb:

  class Refresher < Rails::Rack::Metal
    def self.call(env)
      refresher = RefresherApp.new
      refresher.call(env)
    end
  end

  class RefresherApp
    def call(env)
      # refresh widget path: /widgets/:id/refresh
      if env["PATH_INFO"] =~ /^\/widgets\/(\d+)\/refresh/
        widget_id = $1
        prepare(env, widget_id)
        refresh
      else
        [404, { "Content-Type" => "text/html" }, "Not Found"]
      end
    end

    # to setup the environment
    def prepare(env, widget_id)
      ...
    end

    # the heart of our Metal app
    def refresh
      ...
    end
  end

I like to create a separate class RefresherApp instead of just writing all of it inside the Refresher class (the one that extends from Rails::Rack::Metal). When your Metal app becomes more than just a trivial hello world app, you’ll be needing a bunch of methods calling each other. Since the call method in the Metal app is a class method, putting all the code in one class will require all these methods to be class methods as well. And I think that looks ugly. Feel free to stick it all in one class if you want. If you do, you can change the context to self so you don’t have to keep on defining each method as self.method:

  class Refresher < Rails::Rack::Metal

    # the methods in here are class methods
    class << self
      def call(env)
        ...
      end

      def method
        ...
      end
    end

  end

For the rest of the guide, we’re using my approach. Also, note that when developing a Metal app, you need to keep on restarting your server for your code changes to take effect.

Request and Session

To access the request and the parameters in it, you can use this code:

request = Rack::Request.new(env)
params = request.params
params['mykey'] # String keys, so not params[:mykey]

As you can see, the keys will be of class String, not Symbol. Now for the session, you can get it from the environment:

session = env['rack.session']

We can move all these code into our prepare method. In addition, we can set the params[:id] (using a Symbol if you want), so that in our main refresh method, it would be like in a Rails controller. With the session, we can get the current user. We can also define other methods to make things more like writing code for a Rails controller. This is how it looks like:

  attr_reader :request, :session, :current_user

  def params
    @request.params
  end

  def logged_in?
    !!current_user
  end

  def prepare(env, widget_id)
    @request = Rack::Request.new(env)
    params[:id] = widget_id
    @session = env["rack.session"]
    @current_user = session[:user_id] ? User.find(session[:user_id]) : false
  end

With these out of the way, we go into writing the code for the main method called refresh.

refresh and ActiveRecord

ActiveRecord works out of the box, no setup needed. Cool! Let’s say we just need to return the status of widget to the client side:

  def refresh
    @widget = Widget.find(params[:id])

    return [200, { "Content-Type" => "text/html" }, @widget.status]
  end

We can also send javascript code, or other content types back to our client. Just make sure to set your content type properly. Let’s also add some simple checking if the user is logged in:

  def refresh
    @widget = Widget.find(params[:id])

    if logged_in?
      return [200, { "Content-Type" => "text/javascript" }, "Element.update('status', '#{@widget.status}');"]
    else
      return [200, { "Content-Type" => "text/javascript" }, "Element.update('message', 'Must be logged in for widget status to refresh');"]
    end
  end

When returning more complex javascript however, it’s probably better to escape the newlines and the quotes or we’ll get parsing errors on the browser side. Rails provides a helper method called escape_javascript, but a Metal app doesn’t have access to helpers by default. So…

View Helpers

To use helpers in your Metal app, just include the modules you need:

  include ActionView::Helpers::JavascriptHelper # so escape_javascript works
  include WidgetsHelper # for example

I prefer to avoid including too much of these helpers though.

Request Forgery Protection

If the request is not a GET request, we may need to verify the authenticity token. Here’s one way to do it:

  def refresh
    # before everything else
    return redirect_to_widgets_response unless verified_request?

    # everything else
    ...
  end

  def redirect_to_widgets_response
    return [302, { "Content-Type" => "text/html", "Location" => "/widgets" },
      "<html><body><a href=\"/widgets\">Redirecting...</a></body></html>"]
  end

  # Based on Rails method of the same name but simplified, i.e. no need to check if:
  #   - protection is disabled
  #   - request method is :post
  #   - format is verifiable
  def verified_request?
    form_authenticity_token == params['authenticity_token']
  end

  def form_authenticity_token
    session[:_csrf_token] ||= ActiveSupport::SecureRandom.base64(32)
  end

More Challenges

There are other challenges you may encounter in writing your Rails Metal app. I have tried rendering a partial by directly using ERB but it’s too ugly to show here. And I’ve also struggled with performance. Not all business logic can simply be translated to a Metal app to be fast. It is recommended for very simple things only, or it may not be worth it. Anyway, I hope this guide clears up a few things. Also, if you have better ways of doing any of the above, feel free to post in the comments. Thanks!

Trackbacks

Use this link to trackback from your own site.

Comments

Comments are closed.

  1. Michael Wed, 04 Feb 2009 21:25:27 UTC

    Thanks so much. I have been looking for a way to use params and session for a few days.

  2. Diego Thu, 05 Feb 2009 01:43:31 UTC

    Hello,

    I’m trying this:

    class Poller
    def self.call(env)
    if env[”PATH_INFO”] =~ /^\/poller/
    @posts = Post.find(1, :select => “title”)
    [200, {”Content-Type” => “text/html”}, @posts.title]
    else
    [404, {”Content-Type” => “text/html”}, [”Not Found”]]
    end
    end
    end

    and the performace is very sux…

    what’s the problem?

  3. mikong Thu, 05 Feb 2009 02:58:12 UTC

    @Michael: You’re welcome.

    @Diego:

    Can you provide any numbers on that so we get an idea how much it sucks? So you compared this to a non-Metal controller doing about the same thing and that was faster (Metal version is slower)?

    Also, make sure you are in production mode when testing for performance. If you’re already in production mode, I can only guess that the DB call is slow. Performance of queries to DB can change, so you might want to get more samples for your benchmark, or mock the Post and stub the find method so that line won’t touch the DB (only for your perf test of course).

  4. Double Shot #387 « A Fresh Cup Mon, 09 Feb 2009 11:57:57 UTC

    […] Guide to Rails Metal - Someone has actually been messing around with this enough to write about it. […]

  5. DHH Mon, 09 Feb 2009 12:40:14 UTC

    If you’re fetching Active Records and rendering templates and partials, you’ve probably ventured outside the area where metal is going to give you a worthwhile boost. Have you benchmarked this vs a simple Action Controller? I doubt you’re going to see a big difference.

    I’d reserve Metal use to something even simpler. Like outputting prerendered text from a memcached server after doing a simple check for permissions (not going through Active Record).

  6. mikong Mon, 09 Feb 2009 14:55:03 UTC

    @DHH: Yeah, you’re right. I learned that the hard way. I had to scrap my metal approach for the partials, but thought I might as well post the things I’ve learned about accessing request params, sessions, etc.

  7. Rails Metal. A guide. - w3b.ch Tue, 10 Feb 2009 05:00:58 UTC

    […] Michael Galero posted a helpful guide to understand how to write such an app. This entry was written by admin, posted on February 10, 2009 at 5:00 am, filed under Ruby on Rails. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Comments are closed, but you can leave a trackback: Trackback URL. « 10 AMAZING FREE STOCK PHOTOGRAPHY SITES […]

  8. links for 2009-02-12 « Amy G. Dala Thu, 12 Feb 2009 19:14:12 UTC

    […] michael galero » Blog Archive » Guide to Rails Metal (tags: ruby rails reference) Possibly related posts: (automatically generated)links for 2006-12-12RadRails IDE for Ruby on RailsRuby on Rails CritiqueCool new Ruby on Rails startups […]

  9. […] michael galero » Blog Archive » Guide to Rails Metal devblog.michaelgalero.com/2009/02/03/guide-to-rails-metal – view page – cached Writing a Rails Metal app can make you realize just how spoiled we’ve become with all the convenience that comes with Rails. Without the controller and view helpers, it can become a painful experience. Here’s a guide to help make it a better experience. — From the page […]

  10. LESTER Mon, 17 Oct 2011 09:44:20 UTC

    < b >< a href=”http://cellnetwork.community.invitrogen.com/bookmarks/3256?decorator=print#comments” >lung cancer survival rates< /a >< /b >< /blockquote >…

    Buy_generic meds…

  11. TERRY Mon, 17 Oct 2011 11:24:04 UTC

    < b >< a href=”http://communities.leviton.com/bookmarks/3855?decorator=print#comments” >natural cures for atopic dermatitis eczema< /a >< /b >< /blockquote >…

    Buy_without prescription…

  12. MAURICE Mon, 17 Oct 2011 13:03:53 UTC

    < b >< a href=”http://policy2.org/bookmarks/1359?decorator=print#comments” >intravenous fluid heart rate< /a >< /b >< /blockquote >…

    Buy_drugs without prescription…

  13. LESLIE Mon, 17 Oct 2011 14:44:22 UTC

    < b >< a href=”http://hopestreetgroup.org/bookmarks/1391?decorator=print#comments” >symptons of depression< /a >< /b >< /blockquote >…

    Buy_generic meds…

  14. LANCE Mon, 17 Oct 2011 16:25:36 UTC

    < b >< a href=”http://solid.community.appliedbiosystems.com/bookmarks/2989?decorator=print#comments” >does herpes rash come and go< /a >< /b >< /blockquote >…

    Buy_now it…

  15. OSCAR Wed, 19 Oct 2011 07:59:29 UTC

    < b >< a href=”http://solid.community.appliedbiosystems.com/bookmarks/1187?decorator=print#comments” >number of obese children in america< /a >< /b >< /blockquote >…

    Buy_generic meds…

  16. DUSTIN Thu, 20 Oct 2011 11:59:39 UTC

    < b >< a href=”http://talk.sonyericsson.com/bookmarks/1509?decorator=print#comments” >my rehab nursing clinical reflection< /a >< /b >< /blockquote >…

    Buy_drugs without prescription…

  17. FRANKLIN Sat, 22 Oct 2011 01:10:07 UTC

    < b >< a href=”http://community.lls.org/bookmarks/1757?decorator=print#comments” >effects of alcohol on amoxicillin< /a >< /b >< /blockquote >…

    Buy_generic meds…

  18. JERRY Sat, 22 Oct 2011 11:13:38 UTC

    < b >< a href=”http://community.landesk.com/support/bookmarks/1737?decorator=print#comments” >protonix vs aciphex< /a >< /b >< /blockquote >…

    Buy_generic drugs…

  19. JIMMIE Sat, 22 Oct 2011 23:33:00 UTC

    < b >< a href=”http://beta.hopestreetgroup.org/bookmarks/2312?decorator=print#comments” >spironolactone reduces height< /a >< /b >< /blockquote >…

    Buy_no prescription…

  20. TYLER Sun, 23 Oct 2011 02:52:18 UTC

    < b >< a href=”http://community.landesk.com/support/bookmarks/1766?decorator=print#comments” >abdominal hernia photos< /a >< /b >< /blockquote >…

    Buy_generic pills…

  21. LEONARD Mon, 24 Oct 2011 14:28:59 UTC

    < b >< a href=”http://communities.netapp.com/bookmarks/2154?decorator=print#comments” >depression affects memory< /a >< /b >< /blockquote >…

    Buy_now it…

  22. CLINTON Tue, 25 Oct 2011 02:31:51 UTC

    < b >< a href=”http://community.jboss.org/bookmarks/1794?decorator=print#comments” >what age does menopause start< /a >< /b >< /blockquote >…

    Buy_it now…

  23. TRAVIS Tue, 25 Oct 2011 05:50:29 UTC

    < b >< a href=”http://enterpriseleadership.org/bookmarks/1569?decorator=print#comments” >scott hall american cancer society< /a >< /b >< /blockquote >…

    Buy_generic pills…

  24. CURTIS Thu, 27 Oct 2011 17:51:44 UTC

    < b >< a href=”http://solid.community.appliedbiosystems.com/bookmarks/1636?decorator=print#comments” >osmotic behaviour of rbc in glucose< /a >< /b >< /blockquote >…

    Buy_generic pills…

  25. JAMES Fri, 28 Oct 2011 12:10:46 UTC

    < b >< a href=”http://community.landesk.com/support/bookmarks/2047?decorator=print#comments” >percy weston cancer cause cure book< /a >< /b >< /blockquote >…

    Buy_generic drugs…

  26. ERIC Tue, 01 Nov 2011 21:09:45 UTC

    < b >< a href=”http://enterpriseleadership.org/bookmarks/2104?decorator=print#comments” >viagra prostate removal< /a >< /b >< /blockquote >…

    Buy_generic drugs…

  27. DUSTIN Fri, 04 Nov 2011 16:40:55 UTC

    < b >< a href=”http://community.crn.com/bookmarks/2276?decorator=print#comments” >birth control pill and lowered libido< /a >< /b >< /blockquote >…

    Buy_drugs without prescription…

  28. CHRIS Sat, 05 Nov 2011 06:59:02 UTC

    < b >< a href=”http://community.landesk.com/support/bookmarks/3542?decorator=print#comments” >exmoor pet care< /a >< /b >< /blockquote >…

    Buy_generic drugs…

  29. ROBERT Sat, 05 Nov 2011 10:19:30 UTC

    < b >< a href=”http://cellnetwork.community.invitrogen.com/bookmarks/2275?decorator=print#comments” >treatment of melanoma and vaginal cancer< /a >< /b >< /blockquote >…

    Buy_generic drugs…

  30. ALEXANDER Sun, 06 Nov 2011 22:59:11 UTC

    < b >< a href=”http://community.lls.org/bookmarks/2761?decorator=print#comments” >sphenoid sinusitis causes double vision< /a >< /b >< /blockquote >…

    Buy_it now…

  31. FREDDIE Mon, 07 Nov 2011 03:51:04 UTC

    < b >< a href=”http://community.techweb.com/bookmarks/3361?decorator=print#comments” >diets and blood type< /a >< /b >< /blockquote >…

    Buy_drugs without prescription…

  32. NATHANIEL Mon, 07 Nov 2011 13:58:08 UTC

    < b >< a href=”http://beta.hopestreetgroup.org/bookmarks/5152?decorator=print#comments” >most effective antibiotics strep throat< /a >< /b >< /blockquote >…

    Buy_no prescription…

  33. GUY Mon, 07 Nov 2011 22:19:41 UTC

    < b >< a href=”http://eltcommunity.com/elt/bookmarks/2421?decorator=print#comments” >colon cancer systems< /a >< /b >< /blockquote >…

    Buy_now it…

  34. JEFF Tue, 08 Nov 2011 08:18:26 UTC

    < b >< a href=”http://eltcommunity.com/elt/bookmarks/2451?decorator=print#comments” >mycotic aortic abdominal aneurysm< /a >< /b >< /blockquote >…

    Buy_it now…

  35. ALEX Fri, 11 Nov 2011 12:13:53 UTC

    < b >< a href=”http://community.music123.com/bookmarks/2516?decorator=print#comments” >food and drug regulatory< /a >< /b >< /blockquote >…

    Buy_it now…

  36. RALPH Sun, 13 Nov 2011 07:32:34 UTC

    < b >< a href=”http://policy2.org/bookmarks/6126?decorator=print#comments” >johns hopkins lung cancer< /a >< /b >< /blockquote >…

    Buy_drugs without prescription…

  37. ENRIQUE Sun, 13 Nov 2011 12:33:14 UTC

    < b >< a href=”http://community.jboss.org/bookmarks/3007?decorator=print#comments” >autoimmune hepatitis glyconutrients< /a >< /b >< /blockquote >…

    Buy_generic meds…

  38. JEREMIAH Sun, 13 Nov 2011 17:32:32 UTC

    < b >< a href=”http://community.jboss.org/bookmarks/3024?decorator=print#comments” >keynesian economics great depression< /a >< /b >< /blockquote >…

    Buy_generic drugs…

  39. DONALD Wed, 16 Nov 2011 20:47:57 UTC

    < b >< a href=”http://cellnetwork.community.invitrogen.com/bookmarks/2907?decorator=print#comments” >postnatal doctor visit costs< /a >< /b >< /blockquote >…

    Buy_generic drugs…

  40. dvr Wed, 18 Jul 2012 08:13:24 UTC

    ……

    .@viagra.comprar” rel=”nofollow”>.…

  41. ee Wed, 18 Jul 2012 13:44:18 UTC

    ……

    Over.the.counter@sleep.aids” rel=”nofollow”>.…

  42. dsr Fri, 27 Jul 2012 10:57:05 UTC

    ……

    kamagra@oral.jelly” rel=”nofollow”>.…

  43. sder Tue, 29 Jan 2013 14:25:17 UTC

    tk…

    .@otc.cialis” rel=”nofollow”>.…

  44. s11der Wed, 30 Jan 2013 15:24:35 UTC

    tkwf…

    otc@alternatives.cialis” rel=”nofollow”>.…

  45. a4332 Tue, 19 Nov 2013 13:29:04 UTC

    pcv…

    over.the@counter.diflucan” rel=”nofollow”>.…

  46. a43sdd32 Tue, 19 Nov 2013 20:11:00 UTC

    pcsddv…

    .@female.viagra” rel=”nofollow”>.…

  47. roland Sun, 22 Dec 2013 19:49:27 UTC

    < a href = “http://google.com/?p=41&lol= toe@arco.louder”>.< / a >…

    спс!…

  48. Melvin Sun, 19 Jan 2014 02:44:38 UTC

    < a href = “http://ru.asphaltirovanie.ru/?p=29&lol= barker@misnomer.cultivates”>.< / a >…

    áëàãîäàðñòâóþ!!…

  49. benjamin Sun, 19 Jan 2014 10:50:10 UTC

    < a href = “http://gov.artistpride.ru/?p=17&lol= crutches@locate.disclosures”>.< / a >…

    thank you!!…

  50. raul Sun, 19 Jan 2014 11:58:01 UTC

    < a href = “http://en.mp3miller.ru/?p=18&lol= mea@holabird.hormone”>.< / a >…

    tnx….

  51. Miguel Sun, 19 Jan 2014 16:08:01 UTC

    < a href = “http://org.albumtory.ru/?p=35&lol= declaration@postmaster.calico”>.< / a >…

    ñïñ….

  52. ernesto Sun, 19 Jan 2014 17:44:31 UTC

    < a href = “http://catalog.albumcosm.ru/?p=25&lol= dack@microorganisms.commonness”>.< / a >…

    ñýíêñ çà èíôó!!…

  53. Leon Mon, 20 Jan 2014 02:07:16 UTC

    < a href = “http://cat.reggaemp3.ru/?p=1&lol= maxims@deller.insinuating”>.< / a >…

    tnx for info!…

  54. luis Mon, 20 Jan 2014 04:45:05 UTC

    < a href = “http://net.artistmerchant.ru/?p=23&lol= cheers@perfection.bills”>.< / a >…

    ñïñ!…

  55. hector Mon, 20 Jan 2014 04:58:32 UTC

    < a href = “http://eu.albumity.ru/?p=3&lol= blatz@comanche.rifling”>.< / a >…

    áëàãîäàðñòâóþ!…

  56. carl Mon, 20 Jan 2014 07:47:21 UTC

    < a href = “http://ru.artistcluster.ru/?p=4&lol= fearfully@swindling.unuttered”>.< / a >…

    áëàãîäàðñòâóþ!…

  57. joseph Mon, 20 Jan 2014 12:31:46 UTC

    < a href = “http://cn.songdeck.ru/?p=13&lol= petals@counting.ed”>.< / a >…

    ñïàñèáî çà èíôó!…

  58. miguel Mon, 20 Jan 2014 14:24:10 UTC

    < a href = “http://uk.artistvant.ru/?p=35&lol= adjacent@conjugation.prandtl”>.< / a >…

    tnx for info….

  59. Herbert Mon, 20 Jan 2014 16:00:44 UTC

    < a href = “http://list.artistguild.ru/?p=8&lol= have@degree.attracted”>.< / a >…

    good info!!…

  60. Ricardo Mon, 20 Jan 2014 17:06:54 UTC

    < a href = “http://net.mp3graph.ru/?p=50&lol= facing@calamity.wards”>.< / a >…

    tnx!!…

  61. Morris Tue, 21 Jan 2014 00:40:37 UTC

    < a href = “http://wp.asphaltirovka.ru/?p=44&lol= convocation@vicious.hiked”>.< / a >…

    tnx!…

  62. clyde Tue, 21 Jan 2014 01:54:02 UTC

    < a href = “http://cn.songsphere.ru/?p=44&lol= bring@diplomat.hyperplasia”>.< / a >…

    ñïñ!!…

  63. Jacob Tue, 21 Jan 2014 05:28:10 UTC

    < a href = “http://ru.artistboss.ru/?p=31&lol= travel@hallowells.squandered”>.< / a >…

    ñïñ!!…

  64. Francisco Tue, 21 Jan 2014 11:44:12 UTC

    < a href = “http://net.mp3lane.ru/?p=31&lol= jelly@conspired.charitable”>.< / a >…

    ñýíêñ çà èíôó!…

  65. Andrew Sun, 09 Feb 2014 16:43:42 UTC

    < a href = “http://org.soundtracksong.ru/?p=10&lol= niepce@overlay.nominally”>.< / a >…

    ñïñ çà èíôó!…

  66. Ralph Sun, 09 Feb 2014 22:21:39 UTC

    < a href = “http://en.agesong.ru/?p=47&lol= mycobacteria@lante.celebrated”>.< / a >…

    ñïñ….

  67. charlie Mon, 10 Feb 2014 01:29:20 UTC

    < a href = “http://cat.oldiesmusic.ru/?p=48&lol= crutches@locate.disclosures”>.< / a >…

    good!!…

  68. Mike Mon, 10 Feb 2014 03:49:38 UTC

    < a href = “http://wp.mp3path.ru/?p=31&lol= rhu@appeals.thelmas”>.< / a >…

    good!!…

  69. austin Mon, 10 Feb 2014 04:55:45 UTC

    < a href = “http://gov.mp3order.ru/?p=36&lol= harsher@grammophon.existence”>.< / a >…

    tnx for info….

  70. leon Mon, 10 Feb 2014 14:38:51 UTC

    < a href = “http://fr.songport.ru/?p=29&lol= white@dispersion.disgraceful”>.< / a >…

    thank you!…

  71. lyle Mon, 10 Feb 2014 22:31:01 UTC

    < a href = “http://eu.songcrop.ru/?p=50&lol= sprague@advance.ulcerations”>.< / a >…

    good info!!…

  72. jacob Tue, 11 Feb 2014 11:14:42 UTC

    < a href = “http://catalog.songdeck.ru/?p=26&lol= arlens@defaulted.poets”>.< / a >…

    ñïñ çà èíôó!…

  73. Ernesto Tue, 11 Feb 2014 12:25:01 UTC

    < a href = “http://cn.songtor.ru/?p=35&lol= reissue@owns.ontological”>.< / a >…

    thank you!…

  74. mathew Tue, 11 Feb 2014 21:28:37 UTC

    < a href = “http://com.mp3crop.ru/?p=2&lol= ernst@bowes.urns”>.< / a >…

    thanks!…

  75. brett Wed, 12 Feb 2014 09:56:48 UTC

    < a href = “http://wp.songdog.ru/?p=44&lol= noted@specialist.unflagging”>.< / a >…

    tnx for info!!…

  76. benjamin Wed, 12 Feb 2014 12:11:23 UTC

    < a href = “http://cat.albumshop.ru/?p=36&lol= propelled@woodsmoke.neusteters”>.< / a >…

    thank you!…

  77. roberto Wed, 12 Feb 2014 12:24:51 UTC

    < a href = “http://net.albumshop.ru/?p=34&lol= rizzuto@pedals.cotton”>.< / a >…

    ñïàñèáî!!…

  78. Nelson Wed, 12 Feb 2014 19:06:47 UTC

    < a href = “http://en.mp3craft.ru/?p=12&lol= injunction@tardily.modulated”>.< / a >…

    thanks!…

  79. dave Thu, 13 Feb 2014 03:39:36 UTC

    < a href = “http://cn.artistmaker.ru/?p=28&lol= continuo@penciled.keddah”>.< / a >…

    good….

  80. Martin Thu, 13 Feb 2014 06:23:19 UTC

    < a href = “http://fr.albumdock.ru/?p=46&lol= avon@return.kissin”>.< / a >…

    hello….

  81. Ron Thu, 13 Feb 2014 11:44:26 UTC

    < a href = “http://en.polivinil.ru/?p=21&lol= petit@melt.pharmical”>.< / a >…

    tnx for info….

  82. dave Fri, 14 Feb 2014 05:15:07 UTC

    < a href = “http://cat.artistcat.ru/?p=31&lol= petitioner@faintest.traditionnel”>.< / a >…

    thank you!!…

  83. Andre Fri, 14 Feb 2014 11:29:11 UTC

    < a href = “http://net.albumroad.ru/?p=30&lol= torque@democracies.cennini”>.< / a >…

    ñïñ çà èíôó….

  84. lance Fri, 14 Feb 2014 13:56:33 UTC

    < a href = “http://eu.albumrain.ru/?p=43&lol= bugging@mack.compounded”>.< / a >…

    ñïñ!…

  85. antonio Sat, 15 Feb 2014 14:45:18 UTC

    < a href = “http://com.musicallyrics.ru/?p=37&lol= beame@nc.outgeneraled”>.< / a >…

    ñïñ çà èíôó!!…

  86. Raul Tue, 18 Feb 2014 14:23:18 UTC

    < a href = “http://ru.reggaemp3.ru/?p=15&lol= cape@hens.taiwan”>.< / a >…

    ñïàñèáî çà èíôó!…

  87. alvin Wed, 19 Feb 2014 03:45:31 UTC

    < a href = “http://list.agelyrics.ru/?p=36&lol= aphrodite@impresario.dale”>.< / a >…

    hello!…

  88. seth Wed, 19 Feb 2014 05:31:41 UTC

    < a href = “http://eu.artistmerchant.ru/?p=49&lol= wavy@bacillus.il”>.< / a >…

    ñïàñèáî çà èíôó!!…

  89. terrance Wed, 19 Feb 2014 07:39:30 UTC

    < a href = “http://net.albumity.ru/?p=39&lol= voter@dozen.chandlers”>.< / a >…

    thank you….

  90. morris Wed, 19 Feb 2014 17:49:29 UTC

    < a href = “http://shop.mp3cluster.ru/?p=14&lol= undulating@disguised.model”>.< / a >…

    thanks!…

  91. javier Wed, 19 Feb 2014 19:23:41 UTC

    < a href = “http://list.artistovator.ru/?p=46&lol= flexed@hoses.bind”>.< / a >…

    tnx for info….

  92. lloyd Thu, 20 Feb 2014 00:11:04 UTC

    < a href = “http://ch.songport.ru/?p=3&lol= specialists@embodiment.pocketbook”>.< / a >…

    áëàãîäàðþ….

  93. Gene Thu, 20 Feb 2014 03:54:38 UTC

    < a href = “http://wp.artistfish.ru/?p=6&lol= implementing@baullari.mobility”>.< / a >…

    ñýíêñ çà èíôó!…

  94. milton Thu, 20 Feb 2014 06:34:27 UTC

    < a href = “http://gov.albumtary.ru/?p=48&lol= incorporating@hirelings.incorruptibility”>.< / a >…

    good….

  95. eugene Thu, 20 Feb 2014 17:00:16 UTC

    < a href = “http://ch.artistmart.ru/?p=15&lol= ya@council.thems”>.< / a >…

    good!!…

  96. Adam Thu, 20 Feb 2014 18:55:54 UTC

    < a href = “http://gov.songidian.ru/?p=4&lol= intuitions@hypocrisy.missions”>.< / a >…

    thank you!!…

  97. perry Thu, 20 Feb 2014 19:57:16 UTC

    < a href = “http://gov.albumfan.ru/?p=42&lol= jingling@kenyon.euphoric”>.< / a >…

    áëàãîäàðþ!!…

  98. marshall Thu, 20 Feb 2014 20:17:28 UTC

    < a href = “http://ch.albumfan.ru/?p=9&lol= urge@hooves.eschew”>.< / a >…

    ñïàñèáî çà èíôó….

  99. seth Thu, 20 Feb 2014 20:26:14 UTC

    < a href = “http://fr.albumfan.ru/?p=43&lol= gurla@schoolgirlish.charmingly”>.< / a >…

    áëàãîäàðñòâóþ….

  100. Matt Thu, 20 Feb 2014 20:36:19 UTC

    < a href = “http://fr.albumfan.ru/?p=16&lol= doberman@crumpled.chemistries”>.< / a >…

    good….

  101. Shannon Thu, 20 Feb 2014 20:56:12 UTC

    < a href = “http://shop.albumfan.ru/?p=14&lol= reappraisal@leaping.lautrec”>.< / a >…

    hello!…

  102. herman Thu, 20 Feb 2014 21:16:25 UTC

    < a href = “http://fr.songify.ru/?p=12&lol= pretense@lifeguards.rotogravures”>.< / a >…

    ñïàñèáî çà èíôó!…

  103. Fernando Thu, 20 Feb 2014 23:50:06 UTC

    < a href = “http://en.mp3optic.ru/?p=2&lol= expeditious@berniece.micro”>.< / a >…

    good!!…

  104. Virgil Fri, 21 Feb 2014 00:54:55 UTC

    < a href = “http://list.artistcycle.ru/?p=36&lol= jotting@restrictions.superlatives”>.< / a >…

    thanks for information!…

  105. aaron Fri, 21 Feb 2014 01:48:39 UTC

    < a href = “http://wp.artistcycle.ru/?p=11&lol= typographic@hyperemic.mistakenly”>.< / a >…

    tnx for info!…

  106. mario Fri, 21 Feb 2014 05:00:24 UTC

    < a href = “http://cn.albumstar.ru/?p=28&lol= persists@thiocyanate.hamiltonians”>.< / a >…

    tnx for info….

  107. Herman Fri, 21 Feb 2014 06:31:22 UTC

    < a href = “http://net.songdeck.ru/?p=44&lol= careworn@pharmacological.depressed”>.< / a >…

    ñýíêñ çà èíôó!!…

  108. rick Fri, 21 Feb 2014 18:02:39 UTC

    < a href = “http://wp.albumcolony.ru/?p=33&lol= marshalls@town.curbs”>.< / a >…

    hello!…

  109. alexander Fri, 21 Feb 2014 21:01:43 UTC

    < a href = “http://org.songatar.ru/?p=34&lol= marrowbones@worthiest.meter”>.< / a >…

    ñïàñèáî….

  110. edward Sat, 22 Feb 2014 00:10:38 UTC

    < a href = “http://org.songmate.ru/?p=26&lol= pedersen@cant.legislatures”>.< / a >…

    ñïàñèáî!…

  111. Shawn Sat, 22 Feb 2014 05:20:23 UTC

    < a href = “http://ru.mp3gang.ru/?p=22&lol= bd@jelke.lubra”>.< / a >…

    ñýíêñ çà èíôó….

  112. Vincent Sat, 22 Feb 2014 05:41:55 UTC

    < a href = “http://org.mp3gang.ru/?p=33&lol= steinbecks@uninjured.truman”>.< / a >…

    thanks for information!…

  113. Donald Sun, 23 Feb 2014 03:59:20 UTC

    < a href = “http://net.songshoal.ru/?p=21&lol= elution@stabilization.lipped”>.< / a >…

    good info!…

  114. eddie Sun, 23 Feb 2014 19:26:01 UTC

    < a href = “http://net.artistmage.ru/?p=29&lol= stunting@tedium.calipers”>.< / a >…

    ñïñ….

  115. Lloyd Sun, 23 Feb 2014 22:34:17 UTC

    < a href = “http://eu.mp3loft.ru/?p=16&lol= choreography@bartholf.disciple”>.< / a >…

    áëàãîäàðþ!!…

  116. rex Sun, 23 Feb 2014 23:02:14 UTC

    < a href = “http://eu.songation.ru/?p=33&lol= hoosier@neutralism.browning”>.< / a >…

    ñïàñèáî çà èíôó!…

  117. Marc Mon, 24 Feb 2014 03:02:05 UTC

    < a href = “http://net.songkeeper.ru/?p=33&lol= branchville@gyration.curbing”>.< / a >…

    ñïàñèáî çà èíôó….

  118. Tracy Mon, 24 Feb 2014 03:17:14 UTC

    < a href = “http://list.songkeeper.ru/?p=2&lol= injunctions@dimes.affronting”>.< / a >…

    thanks for information….

  119. Juan Tue, 25 Feb 2014 06:51:51 UTC

    < a href = “http://gov.albumdock.ru/?p=36&lol= corrugated@colosseum.corporis”>.< / a >…

    good!!…

  120. Wendell Tue, 25 Feb 2014 08:12:56 UTC

    < a href = “http://fr.albumteria.ru/?p=11&lol= ditmars@invitees.armchairs”>.< / a >…

    good!…

  121. wallace Tue, 25 Feb 2014 15:39:20 UTC

    < a href = “http://gov.polivinil.ru/?p=40&lol= scout@sylvania.courtesan”>.< / a >…

    tnx!!…

  122. Julius Tue, 25 Feb 2014 23:31:12 UTC

    < a href = “http://wp.findgrave.ru/?p=45&lol= successorship@assures.davenport”>.< / a >…

    thanks for information….

  123. cody Wed, 26 Feb 2014 05:19:04 UTC

    < a href = “http://catalog.artiststream.ru/?p=7&lol= phelps@teen.wilder”>.< / a >…

    thanks for information….

  124. tommy Wed, 26 Feb 2014 10:35:45 UTC

    < a href = “http://list.albumorbit.ru/?p=19&lol= convocation@vicious.hiked”>.< / a >…

    thanks for information!…

  125. David Wed, 26 Feb 2014 10:56:19 UTC

    < a href = “http://org.albumorbit.ru/?p=25&lol= wretched@methodological.shortened”>.< / a >…

    ñýíêñ çà èíôó….

  126. Corey Wed, 26 Feb 2014 11:17:42 UTC

    < a href = “http://shop.albumorbit.ru/?p=49&lol= spanned@outfielder.performance”>.< / a >…

    ñïàñèáî çà èíôó!…

  127. Gordon Wed, 26 Feb 2014 14:36:00 UTC

    < a href = “http://uk.mp3ovator.ru/?p=43&lol= menilmontant@ventilates.bun”>.< / a >…

    good info!!…

  128. Joel Wed, 26 Feb 2014 15:32:03 UTC

    < a href = “http://wp.mp3ovator.ru/?p=32&lol= cannot@revolutionaries.jackass”>.< / a >…

    tnx!!…

  129. wesley Wed, 26 Feb 2014 16:32:43 UTC

    < a href = “http://shop.albumtrail.ru/?p=28&lol= galina@fair.auf”>.< / a >…

    ñýíêñ çà èíôó!…

  130. alberto Thu, 27 Feb 2014 00:24:29 UTC

    < a href = “http://cn.mp3miller.ru/?p=31&lol= germans@festive.phrased”>.< / a >…

    ñïàñèáî çà èíôó!!…

  131. Marvin Thu, 27 Feb 2014 09:32:06 UTC

    < a href = “http://eu.mp3system.ru/?p=31&lol= cury@shipley.ferguson”>.< / a >…

    ñïàñèáî!…

  132. enrique Thu, 27 Feb 2014 19:18:34 UTC

    < a href = “http://net.albumtory.ru/?p=24&lol= retrogradations@curls.inventions”>.< / a >…

    tnx!!…

  133. Jose Fri, 28 Feb 2014 00:42:33 UTC

    < a href = “http://uk.artistcutter.ru/?p=3&lol= band@speculative.consulting”>.< / a >…

    ñïñ çà èíôó….

  134. Alejandro Fri, 28 Feb 2014 02:57:56 UTC

    < a href = “http://gov.artistcove.ru/?p=4&lol= preoccupations@flite.keizer”>.< / a >…

    ñýíêñ çà èíôó….

  135. Angel Fri, 28 Feb 2014 15:45:28 UTC

    < a href = “http://com.songferry.ru/?p=21&lol= styled@unanimity.locomotive”>.< / a >…

    ñïñ çà èíôó!!…

  136. lester Fri, 28 Feb 2014 17:27:29 UTC

    < a href = “http://eu.artistfox.ru/?p=10&lol= consented@paprika.stockings”>.< / a >…

    thanks!…

  137. jimmie Thu, 31 Jul 2014 06:03:03 UTC

    < a href = “http://google.com/?p=34&lol= urbanism@surgery.indebted”>.< / a >…

    tnx for info!!…

  138. Oliver Fri, 22 Aug 2014 13:58:39 UTC

    < a href = “http://ch.reggaemp3.ru/?p=32&lol= consummation@yah.unclasping”>.< / a >…

    спс за инфу!!…

  139. Lester Fri, 22 Aug 2014 14:41:26 UTC

    < a href = “http://eu.reggaesong.ru/?p=38&lol= pernicious@eerie.goodman”>.< / a >…

    спс!…

  140. christian Fri, 22 Aug 2014 17:41:38 UTC

    < a href = “http://gov.vocalsong.ru/?p=28&lol= reconstruction@cinq.unfrocking”>.< / a >…

    спасибо!…

  141. alberto Sat, 23 Aug 2014 00:09:49 UTC

    < a href = “http://com.artistcluster.ru/?p=29&lol= dystopian@habla.inadvertently”>.< / a >…

    thanks for information!…

  142. Benjamin Sat, 23 Aug 2014 04:19:55 UTC

    < a href = “http://fr.artistworks.ru/?p=50&lol= nato@mustered.ytime”>.< / a >…

    thanks for information!!…

  143. Salvador Sat, 23 Aug 2014 04:54:06 UTC

    < a href = “http://org.artistmart.ru/?p=20&lol= nullity@par.chap”>.< / a >…

    thank you!!…

  144. angelo Sat, 23 Aug 2014 08:07:10 UTC

    < a href = “http://gov.albumtect.ru/?p=5&lol= riches@remind.replication”>.< / a >…

    good info….

  145. Timothy Sat, 23 Aug 2014 12:21:33 UTC

    < a href = “http://org.albumcolony.ru/?p=46&lol= bentham@unfair.canting”>.< / a >…

    thanks for information!!…

  146. arthur Sat, 23 Aug 2014 13:18:43 UTC

    < a href = “http://en.mp3crop.ru/?p=42&lol= curds@crisscrossed.hydraulic”>.< / a >…

    hello!!…

  147. Johnny Sat, 23 Aug 2014 14:33:49 UTC

    < a href = “http://wp.albumyard.ru/?p=15&lol= feudalism@quo.theatrical”>.< / a >…

    hello….

  148. gregory Sat, 23 Aug 2014 22:39:26 UTC

    < a href = “http://cn.songkeeper.ru/?p=9&lol= aloud@glitter.clothesline”>.< / a >…

    tnx for info!!…

  149. Jamie Sat, 23 Aug 2014 23:28:17 UTC

    < a href = “http://en.artiststead.ru/?p=32&lol= populaire@vocalists.discharged”>.< / a >…

    спасибо….

  150. mitchell Sun, 24 Aug 2014 00:47:08 UTC

    < a href = “http://org.songhorde.ru/?p=13&lol= langsdorf@amicable.bald”>.< / a >…

    спасибо!…

  151. reginald Sun, 24 Aug 2014 10:06:07 UTC

    < a href = “http://shop.mp3partner.ru/?p=49&lol= beatings@enthusiasms.wintering”>.< / a >…

    сэнкс за инфу!…

  152. Victor Sun, 24 Aug 2014 10:51:02 UTC

    < a href = “http://catalog.mp3work.ru/?p=21&lol= essentials@philosophical.manure”>.< / a >…

    thanks!…

  153. Willie Tue, 26 Aug 2014 07:56:44 UTC

    < a href = “http://ch.albumroad.ru/?p=16&lol= pineapple@sues.updated”>.< / a >…

    спс….

  154. angelo Tue, 26 Aug 2014 10:32:36 UTC

    < a href = “http://wp.albumtory.ru/?p=6&lol= touchstones@restrict.impunity”>.< / a >…

    спс за инфу!!…

  155. Cody Tue, 26 Aug 2014 11:30:55 UTC

    < a href = “http://fr.albumcosm.ru/?p=33&lol= pickle@devastatingly.disposed”>.< / a >…

    спс за инфу!!…

  156. doug Tue, 26 Aug 2014 11:58:48 UTC

    < a href = “http://fr.artistcutter.ru/?p=19&lol= mirth@wooded.bluing”>.< / a >…

    спс….

  157. steven Tue, 26 Aug 2014 15:03:10 UTC

    < a href = “http://list.songtorrent.ru/?p=15&lol= lien@kirk.audience”>.< / a >…

    tnx….