为什么我得到NameError:uninitialized constant只是在一台新机器上创建一个rake db:create

时间:2016-11-21 17:38:14

标签: ruby-on-rails ruby

我的虚拟机上有一个rails应用程序。环境是发展,我经常研究它。我在新的nserver上从repo中提取代码,并始终将RAILS_ENV设置为development我调用了第一个命令rake db:migrate,我得到的是我的一个类是NameError:uninitialized constant

如果我的代码和环境相同,这怎么可能?我的虚拟机上的自动加载是以正确的方式配置的。

    config.autoload_paths << Rails.root.join('lib')
    config.autoload_paths += Dir[Rails.root.join('app', 'api', '**', '**', '*')]

无法找到的课程在app/api/nameofclass/anothername/api.rb

2 个答案:

答案 0 :(得分:2)

使用DKIM作为名称会有问题,因为自动加载器会将其映射到路径中的d_k_i_m/。尽可能避免创建包含大写字母的目录或文件,这会导致区分大小写的文件系统出现混乱。

app/api/domains/dkim/api.rb应包含Domains::Dkim::Api

如果你想使用一些非标准的命名系统,你必须手动强制加载你的东西,自动加载器不会为你做。

自动加载指令应该是:

config.autoload_paths << Rails.root.join('app', 'api')

您不希望在自动加载路径中包含每个文件。

答案 1 :(得分:1)

使用此代替两行:

config.autoload_paths += %W|lib app/api/**|