cod*_*ver 5 rack ruby-on-rails heroku rack-middleware ruby-on-rails-4.1
我查看了一些答案 1] 包含在 qoutes 中,2] 不要使用 require 等,但它们都不起作用。Rails4 中的解决方案可能已更改
我正在尝试按照此处的教程进行操作https://devcenter.heroku.com/articles/ruby-websockets#using-with-rails
它说将现有的 ChatBackend 中间件复制到 Rails 项目中的 app/middleware/chat_backend.rb 。然后将中间件插入到您的堆栈中,在 config/application.rb 中定义:
require 'chat_backend'
config.middleware.use ChatDemo::ChatBackend
Run Code Online (Sandbox Code Playgroud)
我在 app/middlewares/chat_backend.rb 中定义了中间件,如下所示:
require 'faye/websocket'
require 'thread'
require 'redis'
require 'json'
require 'erb'
module ChatDemo
class ChatBackend
KEEPALIVE_TIME = 15 # in seconds
CHANNEL = 'twitter-stream'
def initialize(app)
end
/// DELETED CODE for simplicity
end
Run Code Online (Sandbox Code Playgroud)
这是应用程序.rb
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require 'chat_backend' <= ERROR: config/application.rb:4:in `require': cannot load such file -- chat_backend (LoadError)
Bundler.require(*Rails.groups)
module MyProject
class Application < Rails::Application
config.middleware.use ChatDemo::ChatBackend
end
end
Run Code Online (Sandbox Code Playgroud)
具体如何添加中间件。感谢任何确切的代码示例。
您不需要任何东西,因为app它位于 Rails 4.x 加载路径中。
简单地将您的中间件类放入app/middleware文件夹中,然后通过以下方式将其添加到机架中config.middleware.use(new_middleware, args)
例如:
app/middleware/name_is_important.rb
class NameIsImportant
# logic goes here
end
Run Code Online (Sandbox Code Playgroud)
application.rb在(字符串)中:
config.middleware.use 'NameIsImportant'
Run Code Online (Sandbox Code Playgroud)
或者在环境文件中,例如development.rb(在这里您可以使用类名):
config.middleware.use NameIsImportant
Run Code Online (Sandbox Code Playgroud)
您的具体情况不起作用,因为您尝试导入(这是不必要的)不存在的类。如果出于某种原因您想将您的类封装在模块中,则它必须反映在路径中。
将您的类添加到正确的目录:app/middleware/chat_demo/chat_backend.rb
module ChatDemo
class ChatBackend
end
end
Run Code Online (Sandbox Code Playgroud)
在application.rb:
config.middleware.use 'ChatDemo::ChatBackend'
Run Code Online (Sandbox Code Playgroud)
然而,我相信这个模块是不必要的,它是向 Rack 添加中间件时出现的所有问题的根源。尝试使用模块中的类、不使用它以及使用不同的目录。观察rack middleware输出。
通常,Rack 中间件通过在内部声明来插入到 Rails 应用程序中config/application.rb。您可能需要require 'something'在该文件的标头中,然后在应用程序配置块中,config.middleware.use Rack::MiddlewareName 如下所示。
如果中间件来自 gem,您的 Gemfile 可能会require自动生成该中间件,因此该require行可能是多余的。
require 'bouncy_module'
module Coachpage
class Application < Rails::Application
config.i18n.enforce_available_locales = true
# other config options
config.middleware.use Rack::Bouncy
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3713 次 |
| 最近记录: |