我是Ruby on Rails(以前和当前的PHP专家)的新手,请原谅我的无知,但是我试图让Sinatra作为中间件工作,重定向一些旧网址,因为我尝试了gem rack-rewrite而不能让它工作。
我正在使用ASCIIcast中的代码示例,所以在我的routes.rb中我有以下内容:
root :to => HomeApp
(^我只重定向根用于测试)
在我的lib文件夹中,我有home_app.rb
class HomeApp < Sinatra::Base
get "/" do
"Hello from Sinatra"
end
end
当我启动服务器(或者它已经运行)时,它会产生错误:
routes.rb:10: uninitialized constant HomeApp
似乎它只是不知道lib / home_app.rb文件。
我已将Sinatra包含在我的Gemfile中并运行了bundle install并确认它已包含在内。
我只是想将旧网址从旧网站重新路由到我的新ruby应用程序,但无法使这些中间件/机架工作正常。所有文档都假设您不是全新的,或者是针对3.0之前的RoR。
答案 0 :(得分:2)
如果要重定向某些网址,则无需使用Sinatra。您可以使用新的redirect
方法。请参阅Rails Dispatch article。
match "/stories/:year/:month/:day/:name" => redirect("/%{name}")
constraints :user_agent => /iPhone/, :subdomain => /^(?!i\.)/ do
match "*path" => redirect {|params, req| "http://i.myapp.com/#{req.fullpath}" }
end
在您的特定情况下,问题是未加载HomeApp
类。将/ lib文件夹添加到更改application.rb
config.autoload_paths += %W( #{config.root}/lib )
或require
文件。