1

I'm trying to figure out how to properly setup rack-rewrite and am having some trouble. I'm a bit of a noob and the site isn't super clear on the setup. I have a couple of questions if anyone knows more about it.

1) Do I need to put the gem in both my gemfile and the config.ru file? (per the "Sample rackup file" in the section of the README)

2) Do I need to have rack-rewrite setup in both my config.ru file and my config/application.rb file? (per the "Sample rackup file" and "Sample usage in a rails app" sections of the README)

3) Where in my application.rb file do I put the config? In the class Application < Rails::Application block?

4) I have tried both of the above, however, when I start unicorn locally, I get the following error

    $ unicorn
I, [2014-05-13T16:57:00.926144 #17432]  INFO -- : Refreshing Gem list
/config/environment.rb:2:in `require': /config/application.rb:98: syntax error, unexpected end-of-input, expecting keyword_end (SyntaxError)
  from /config/environment.rb:2:in `<top (required)>'
  from config.ru:4:in `require'
  from config.ru:4:in `block in <main>'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/gems/rack-1.4.5/lib/rack/builder.rb:51:in `instance_eval'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/gems/rack-1.4.5/lib/rack/builder.rb:51:in `initialize'
  from config.ru:1:in `new'
  from config.ru:1:in `<main>'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/gems/unicorn-4.8.2/lib/unicorn.rb:48:in `eval'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/gems/unicorn-4.8.2/lib/unicorn.rb:48:in `block in builder'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/gems/unicorn-4.8.2/lib/unicorn/http_server.rb:760:in `call'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/gems/unicorn-4.8.2/lib/unicorn/http_server.rb:760:in `build_app!'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/gems/unicorn-4.8.2/lib/unicorn/http_server.rb:137:in `start'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/gems/unicorn-4.8.2/bin/unicorn:126:in `<top (required)>'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/bin/unicorn:23:in `load'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/bin/unicorn:23:in `<main>'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/bin/ruby_noexec_wrapper:14:in `eval'
  from /Users/me/.rvm/gems/ruby-2.0.0-p0@mysite/bin/ruby_noexec_wrapper:14:in `<main>'>'

--------------------UPDATE--------------------

I've worked out the issues above. It seems that the gem is pretty versatile in so much as you can set it up in application.rb, config.ru, or create a rack_rewrite.rb file in the initializers directory.

Does anyone have any opinion of where the best place to put the code is?

Also, is there a way to account for a trailing / in redirects? For instance, is there a way to condense this into a single line?

r301 '/for-gyms-and-rec-centers', '/venues/3'
r301 '/for-gyms-and-rec-centers/', '/venues/3/
Eric Norcross
  • 4,177
  • 4
  • 28
  • 53

1 Answers1

0

If you're using a rails app, then you should probably keep it clean, and only put the rack rewrite gem declaration in your gemfile, and you don't need it in the config.ru file. On top of that, you only need the config code in your application.rb file.

You can safely put the block near the end of your class's block, right before the last end for your class (which happens to come before the last end of the module). Keep in mind that with unicorn, be careful where you insert the rack middleware in your stack - i believe you'll want to target it right before Rack::Runtime and not Rack::Lock.

As far as the trailing slash question, I believe you can have '/for-gyms-and-rec-centers(.*)' and that should catch it.

courtsimas
  • 764
  • 1
  • 13
  • 20