Ruby 关于自动加载:require_dependencies 的问题

yyyuezhi · 2022年05月18日 · 最后由 yyyuezhi 回复于 2022年05月19日 · 286 次阅读

我有一个 rails 应用 api,里面的 model 中的某个.rb 文件中用到了一个方法 DatabaseName::TableName.find_sth,find_sth 这个方法并没有定义在 api 这个包里,而是定义在另一个包——common 里,但是 api 中并没有 require/include 这个包。api 中有两处与 common 包相关的地方,一个是 gem“common”,但经过测试,并不是 gem 了这个包 api 就能认识 common 中的方法 (以及数据库名或表名);另一个是在 api\config\initializers\中的一个文件里有一句——Common::Projects.require_dependencies(:api) 我感觉这里是能说明为什么 api 能认识 common 中的方法,但是我还是不懂是怎么实现的,而且 require_dependencies 这个方法也定义在 common 中,这不是一个官方的方法吗?Common::Projects.require_dependencies(:api) 看起来也是直接用了 Common 这个包...... 求大神解惑🙇 🙇 🙇

这排版真是看得头大。参考排版

Projects.method(:require_dependencies) 就能打印 require_dependencies 方法定义在哪了

xinyifly 回复

是呀 只是我看的那个代码里是写的 require_dependencies

对于 rails app 来说

  1. 在 rails app 目录下的是自动加载(view, control, model etc)。(其实就是 rails 框架把这些都做了)
  2. 在 gem file,和 第三方 lib,一般都是用 bundle gem 管理。Rails 不自动加载 加载这些 gem。 你要是没有看到手动 require 某个 gem, 可能是你的 app 在哪里初始化的地方已经全部加载这些 gem 了。比如,一般可以用 bundler 把 列在 gem file 的 gem 都自动 load 进来,而不是 手动 require 每个具体的 gem
require 'bundler/setup' 
Bundler.require

可以看看初始 code,config.ru, application.rb etc... 不同版本可能有点不同

https://guides.rubyonrails.org/initialization.html 可以看看怎么样初始化的

2cs 😄

good luck

spike76 回复

嗦嘎 下次一定注意 (‵▽′)/ 我去看看这个命令

需要 登录 后方可回复, 如果你还没有账号请 注册新账号