我试图找出如何正确设置rack-rewrite并遇到麻烦。我有点像菜鸟,网站在设置上并不是很清楚。如果有人知道更多,我有几个问题。
1)我是否需要将gem放入gemfile
和config.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.rb
,config.ru
中设置它,或者在initializers目录中创建一个rack_rewrite.rb
文件。
有没有人对放置代码的最佳位置有何看法?
另外,有没有办法在重定向中考虑尾随/
?例如,有没有办法将其压缩成一行?
r301 '/for-gyms-and-rec-centers', '/venues/3'
r301 '/for-gyms-and-rec-centers/', '/venues/3/
答案 0 :(得分:0)
如果你正在使用rails应用程序,那么你应该保持它干净,并且只在你的gemfile中放置机架重写gem声明,而你在config.ru文件中不需要它。最重要的是,您只需要application.rb文件中的配置代码。
您可以安全地将该块放在类的块的末尾,就在您的类的最后一个end
之前(恰好在模块的最后一个结束之前)。请记住,使用独角兽时,请小心将机架中间件插入堆叠中 - 我相信您需要在Rack::Runtime
而不是Rack::Lock
之前定位它。
至于尾随斜线问题,我相信你可以拥有'/for-gyms-and-rec-centers(.*)'
而且应该抓住它。