2017-07-17 84 views
0

每次控制器或模型试图访问的/ lib文件夹,它说的一类:Rails的不是lib文件夹中查找文件

NameError(未初始化常量“current_controller”:“CLASS_NAME”你的意思是' something_else')

是的,我知道导轨命名约定,我正确使用它。我的代码在其他几个服务器上运行(Ubuntu & CentOS 6)。它仅在我们拥有的这两台RedHat7.2服务器上出现错误 - 所有服务器上的确切ruby/rails/gems相同。该错误发生在我尝试使用的任何库文件中。 SELinux被禁用。

Ruby version 2.3.3; Rails版本5.1.0(在所有服务器上相同)

任何人有任何想法? Rails假设会自动加载这些类文件。

+0

在你没有告诉它的情况下,rails不会自动加载lib /中的文件。 –

+0

[自动加载Rails 4中的lib文件]可能的重复(https://stackoverflow.com/questions/19098663/auto-loading-lib-files-in-rails-4) –

回答

3

在轨道上< 5:

在轨道上的config/application.rb中

module your_app 
    class Application < Rails::Application 
    # Settings in config/environments/* take precedence over those specified here. 
    # Application configuration should go into files in config/initializers 
    # -- all .rb files in that directory are automatically loaded. 
    config.autoload_paths += %W(#{config.root}/lib/path) 
    end 
end 

> = 5

module your_app 
    class Application < Rails::Application 
    config.eager_load_paths << "#{Rails.root}/lib/path" 
    end 
end 

如果你想导轨自动加载的lib你必须把它在app文件夹下。

+0

你不需要添加'lib'到rails 5中的'autoload_paths'?我相信'eager_load_paths'只有在'eager_load'设置为true时才会生效,这在开发中不会成立。在rails 5中,如果'eager_load'为true,rails将不会回退到生产自动加载,因此您还需要将目录添加到eager_load_paths中。 – Puhlze

+0

@Puhlze至少5.1.2我只有'eager_load_paths',双重检查'config.eager_load'并在'development.rb'上设置为false。这些类不会被eager_loaded,但可用的路径?不知道那里有什么黑魔法,现在看不到它:p –

+0

我的application.rb必须更新到rails 5标准。我不明白为什么在一些服务器上它仍然使用rails 4标准。现在每个人都有轨道5标准,每个人都很开心:) – pirhac