lin*_*ndy 51 ruby-on-rails autoload ruby-on-rails-4.2
我正在研究Rails 4.2应用程序并刚刚添加app/services/fetch_artists.rb到结构中.在这个文件里面,我已经定义了一个class FetchArtists; end.
试图运行rails r 'FetchArtists'它给我一个NameError: uninitialized constant FetchArtists.
我试过看,ActiveSupport::Dependencies.autoload_paths确实,app/services不存在:
/.../app/assets
/.../app/controllers
/.../app/helpers
/.../app/jobs
/.../app/mailers
/.../app/models
/.../app/controllers/concerns
/.../app/models/concerns
/.../spec/mailers/previews
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么这个文件夹没有自动加载,我该怎么办呢?
编辑
很奇怪,在反复运行上面的命令后rails runner,新文件夹出现在自动加载路径上.我不知道为什么会发生这样的延迟.
有人建议这可以处理spring.我想更多地了解这一点,因为它也可能在这种情况下帮助许多其他人.
mak*_*knz 88
我遇到了同样的问题,它似乎是Spring的一个缓存问题,一个处理预加载应用程序的进程.它用于Web服务器以及控制台和Rake任务.
停止使用Spring bin/spring stop会强制Spring加载你的应用程序.现在运行rails console和检查ActiveSupport::Dependencies.autoload_paths将成功显示app/services.
小智 17
在我的情况下,spring没有在app/services目录中查看更改 - 重新启动Spring会加载类,但是对现有类或新类的更改将需要重新启动Spring才能应用它们.
为解决此问题,我将其添加到Spring监视的目录列表中config/spring.rb:
%w(
.ruby-version
.rbenv-vars
tmp/restart.txt
tmp/caching-dev.txt
app/services
).each { |path| Spring.watch(path) }
Run Code Online (Sandbox Code Playgroud)
并重新启动Spring一次.
sba*_*uch 12
我遇到了类似的问题,并快速浏览了一下Spring文档并发现了一些关于观察者的问题.
我在应用程序中添加了以下内容.rb并且事情已经到位 -
Spring.watch "app/services/**"
Run Code Online (Sandbox Code Playgroud)
我不是这里的专家,ymmv.
我遇到了同样的问题,但没有找到解决办法.我没耐心等待自动加载最终加载它,所以我的快速解决方案是打开eager_load,然后启动我的服务器.它最终会加载它.之后我把它关掉了,我的班级仍然装满了.
只需使用:
config.eager_load = true
在你的 config/environments/development.rb
dim*_*ura -4
您应该将其包含到autoload_paths:
config.autoload_paths += %W(#{Rails.root}/app/services)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21097 次 |
| 最近记录: |