【发布时间】:2014-01-26 21:31:35
【问题描述】:
我有一些自定义中间件包含在我的堆栈顶部,我需要在其中做的是访问 rails 缓存。如何从中间件加载/访问 rails 缓存,而无需先加载整个 rails 应用程序?
【问题讨论】:
-
我认为您对我发布的答案感到满意并且您接受了它,请您给我的答案投票!
标签: ruby-on-rails ruby-on-rails-3 rack rack-middleware
我有一些自定义中间件包含在我的堆栈顶部,我需要在其中做的是访问 rails 缓存。如何从中间件加载/访问 rails 缓存,而无需先加载整个 rails 应用程序?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 rack rack-middleware
机架上的导轨 Rails 应用程序的机架对象
ApplicationName::Application 是 Rails 应用程序的主要 Rack 应用程序对象。任何 Rack 兼容的 Web 服务器都应该使用 ApplicationName::Application object 来服务 Rails 应用程序。 Rails.application 指的是同一个应用程序对象。
轨道服务器
rails 服务器完成创建 Rack::Server 对象和启动网络服务器的基本工作。
下面是 rails server 如何创建 Rack::Server 实例
Rails::Server.new.tap do |server|
require APP_PATH
Dir.chdir(Rails.application.root)
server.start
end
Rails::Server 继承自 Rack::Server 并以这种方式调用 Rack::Server#start 方法:
class Server < ::Rack::Server
def start
...
super
end
end
这是加载中间件的方式:
def middleware
middlewares = []
middlewares << [Rails::Rack::Debugger] if options[:debugger]
middlewares << [::Rack::ContentLength]
Hash.new(middlewares)
end
礼貌:http://guides.rubyonrails.org/rails_on_rack.html 你也可以关注:https://devcenter.heroku.com/articles/rack-cache-memcached-rails31
【讨论】:
我刚刚做了一个测试,并且
Rails.cache.fetch('test') { 'A test' }
在自定义中间件内部,它工作得很好。
你可以试试吗?
【讨论】: