Heroku ActionController :: RoutingError(未初始化的常量错误)

时间:2015-10-20 13:08:29

标签: ruby-on-rails ruby heroku

Rails 4.2.4,Ruby 2.1.7

我在lib /目录中有一个模块。

LIB / BLL / user_feed.rb

module BLL
 class UserFeed

    def initialize
        logger.debug "Class has been initialized"
    end

    def get_user_feed(user_id)
      # logic here

        return {
         # object
        }
    end
 end
end

当我尝试将其包含在我的控制器中以使用我的user_Feed逻辑时,

 class UserfeedController < ApplicationController
  include BLL

 before_action :authenticate_user!

  def show
   # some logic
  end
end

在我的config / application.rb

config.autoload_paths << Rails.root.join('lib')

这在本地运行正常,但是当我在Heroku上部署它时会中断。

它的投掷

ActionController :: RoutingError(未初始化的常量UserfeedController :: BLL):

错误。

2015-10-20T13:45:13.791457+00:00 app[web.1]: /app/app/controllers/api/v1/userfeed_controller.rb:1:in `<top (required)>': uninitialized constant Bll (NameError)
2015-10-20T13:45:13.791457+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/railties-4.2.4/lib/rails/engine.rb:472:in `block (2 levels) in eager_load!'
2015-10-20T13:45:13.791458+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/railties-4.2.4/lib/rails/engine.rb:471:in `each'
2015-10-20T13:45:13.791459+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/railties-4.2.4/lib/rails/engine.rb:471:in `block in eager_load!'
2015-10-20T13:45:13.791460+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/railties-4.2.4/lib/rails/engine.rb:469:in `each'
2015-10-20T13:45:13.791462+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/railties-4.2.4/lib/rails/engine.rb:469:in `eager_load!'
2015-10-20T13:45:13.791463+00:00 app[web.1]:    from /app/vendor/bundle/ruby/2.1.0/gems/railties-4.2.4/lib/rails/engine.rb:346:in `eager_load!'

有什么建议吗?

enter image description here

4 个答案:

答案 0 :(得分:0)

我认为你错过了module BLL; end

中的lib/bll.rb

但是,也可以命名模块Bll,但我认为不是这样的

答案 1 :(得分:0)

config.autoload_paths += %W(#{config.root}/lib/BLL)

并且不要忘记重启服务器

<强> EDIT1
此外;将目录BLL的名称更改为bll也可以

答案 2 :(得分:0)

Ruby默认为CamelCase,您必须使用以下内容:

#vendor/bll/user_feed.rb
module Bll
  class UserFeed
    ...
  end
end

作为第二个,vendor dir是自动加载的(据我所知),因此上面的代码应该用于解决UnrecognizedConstant错误。

https://softwareengineering.stackexchange.com/questions/123305/what-is-the-difference-between-the-lib-and-vendor-folders

答案 3 :(得分:0)

Rails实际上会在应用加载时加载您的应用目录。因此,实际上无需在自动加载路径中提及您的 app / bll

但是,在这种情况下,我在做错的是在课堂上添加模块。

所以,我的应用正在寻找app / bll / bll / Whatever

format.json { render :show, status: :created, location: @post }

您需要做的就是。

module Bll - there is not need for this module to be declared
  class Whatever
    # some logic.
  end
end

在此之后,您的课程可供使用。