【问题标题】:How to access rails cache inside rack middlware如何访问机架中间件中的 Rails 缓存
【发布时间】:2014-01-26 21:31:35
【问题描述】:

我有一些自定义中间件包含在我的堆栈顶部,我需要在其中做的是访问 rails 缓存。如何从中间件加载/访问 rails 缓存,而无需先加载整个 rails 应用程序?

【问题讨论】:

  • 我认为您对我发布的答案感到满意并且您接受了它,请您给我的答案投票!

标签: ruby-on-rails ruby-on-rails-3 rack rack-middleware


【解决方案1】:

机架上的导轨 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

【讨论】:

    【解决方案2】:

    我刚刚做了一个测试,并且

    Rails.cache.fetch('test') { 'A test' }
    

    在自定义中间件内部,它工作得很好。

    你可以试试吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多