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!'
有什么建议吗?
答案 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
错误。
答案 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
在此之后,您的课程可供使用。