Docker环境下Rails初始化器require_relative加载失败的调试方法
调试方案
修正
require_relative路径
你的my_ini.rb位于app/config/initializers/,往上退两层是app/目录,但目标lib文件夹在项目根目录,所以正确的相对路径需要多退一层。替换原语句为:require_relative "../../../lib/ryze/ryze"验证Docker容器内的实际目录结构
进入运行的Docker容器,确认文件系统是否和本地结构匹配:docker exec -it <容器名称或ID> bash # 查看根目录下的lib是否存在 ls -la /app/lib/ # 对比本地结构,确认挂载是否正确 ls -la /lib/若Docker挂载配置错误,可能导致本地
lib未被挂载到容器内,或挂载位置不符。改用Rails加载机制替代相对路径
Rails默认将根目录lib加入加载路径,可直接使用require:require "ryze/ryze"若仍报错,先打印当前加载路径确认
lib是否在列:puts $LOAD_PATH.inspect若未找到目标路径,手动添加后再加载:
$LOAD_PATH.unshift(File.expand_path("../../../lib", __FILE__)) require "ryze/ryze"检查文件权限
进入容器后,确认Rails进程有读取目标文件的权限:ls -l /app/lib/ryze/ryze.rb若权限不足,执行:
chmod 644 /app/lib/ryze/ryze.rb核对文件名大小写
Linux环境(Docker默认基于Linux)区分文件名大小写,确认容器内文件名ryze.rb与代码中的引用完全一致,避免因大小写差异导致加载失败。
内容的提问来源于stack exchange,提问作者queroga_vqz
相关产品推荐
相关产品推荐

