正确配置机架重写与独角兽本地开发和heroku

时间:2014-05-14 00:12:44

标签: ruby-on-rails heroku rack unicorn rack-rewrite

我试图找出如何正确设置rack-rewrite并遇到麻烦。我有点像菜鸟,网站在设置上并不是很清楚。如果有人知道更多,我有几个问题。

1)我是否需要将gem放入gemfileconfig.ru文件中? (根据"示例机架文件"在README部分中)

2)我是否需要在config.ru文件和config/application.rb文件中进行机架重写设置? (根据"示例机架文件"以及" rails应用程序中的示例用法" README部分)

3)我在application.rb文件中的哪个地方放了配置?在class Application < Rails::Application区块?

4)我已经尝试了上述两种方法,但是,当我在本地启动unicorn时,出现以下错误

    $ 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 --------------------

我已经解决了上述问题。看起来gem非常通用,因为你可以在application.rbconfig.ru中设置它,或者在initializers目录中创建一个rack_rewrite.rb文件。

有没有人对放置代码的最佳位置有何看法?

另外,有没有办法在重定向中考虑尾随/?例如,有没有办法将其压缩成一行?

r301 '/for-gyms-and-rec-centers', '/venues/3'
r301 '/for-gyms-and-rec-centers/', '/venues/3/

1 个答案:

答案 0 :(得分:0)

如果你正在使用rails应用程序,那么你应该保持它干净,并且只在你的gemfile中放置机架重写gem声明,而你在config.ru文件中不需要它。最重要的是,您只需要application.rb文件中的配置代码。

您可以安全地将该块放在类的块的末尾,就在您的类的最后一个end之前(恰好在模块的最后一个结束之前)。请记住,使用独角兽时,请小心将机架中间件插入堆叠中 - 我相信您需要在Rack::Runtime而不是Rack::Lock之前定位它。

至于尾随斜线问题,我相信你可以拥有'/for-gyms-and-rec-centers(.*)'而且应该抓住它。