【问题标题】:Rails 5 - Cannot initialize ActionCableRails 5 - 无法初始化 ActionCable
【发布时间】:2017-03-13 14:00:26
【问题描述】:

我刚刚将我的应用升级到 Rails 5,我正在学习有关 ActionCable 基础知识的教程,但我无法启动服务器。

每次我尝试这样做时,都会收到以下错误:

uninitialized constant ActionCable (NameError)

它似乎来自我的routes.rb 文件,来自这一行:

mount ActionCable.server => '/cable'

到目前为止,我阅读的每个教程中都指定了这一行,所以我认为 Actioncable 需要它来工作。有没有人遇到过这个问题?我的 gemfile 是最新的,我使用的是 rails 5.0.0.1

【问题讨论】:

  • 鉴于您的 Gemfile 具有 Rails5,它应该可以工作 - 如果您通过捆绑程序启动服务器(例如,bundle exec rails s),您是否会遇到相同的错误?
  • @gmcnaughton 是的,完全相同的错误

标签: ruby-on-rails actioncable


【解决方案1】:

如果您确定在正确的位置声明了通道和连接文件,请确保您在 config/application.rb 中加载 ActionCable。

您可能在此文件中有如下内容:

require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
# require "sprockets/railtie"
# require "rails/test_unit/railtie"

在这种情况下,您只需添加require "action_cable/engine"

或者,如果您愿意,可以使用require "rails/all" 一次性加载所有框架。 Rails Initialization Process guide 对此有更多详细信息。

rails/all 加载以下内容:

  active_record/railtie
  action_controller/railtie
  action_view/railtie
  action_mailer/railtie
  active_job/railtie
  action_cable/engine
  rails/test_unit/railtie
  sprockets/railtie

【讨论】:

    【解决方案2】:

    根据this 的回答,请确保您已遵循以下文件路径。你需要像这样的app/channels/application_cable/channel.rb

    module ApplicationCable
      class Channel < ActionCable::Channel::Base
      end
    end
    

    app/channels/application_cable/connection.rb

    module ApplicationCable
      class Connection < ActionCable::Connection::Base
      end
    end
    

    【讨论】:

    • 不,两个文件都像这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多