You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WSL Ubuntu环境中安装Fedena插件时触发School Not Selected错误的技术求助

我之前碰到过Fedena在WSL Ubuntu下安装插件时的这个问题,核心原因就是多学校插件的上下文没有被正确初始化——MultiSchool.current_school返回了nil,导致查询操作触发了School Not Selected异常。下面是一步步的排查和解决方法:

1. 先确认数据库里是否存在School记录

首先要确保你的Fedena数据库里已经创建了至少一个学校实例,否则current_school肯定找不到值。

打开终端,进入Fedena项目目录,执行:

rails console # 如果你用生产环境,加 RAILS_ENV=production

在控制台里输入:

# 查看现有学校数量
puts School.count

# 如果输出是0,创建一个默认学校(根据Fedena的模型要求填写必填字段)
School.create!(
  name: "我的默认学校",
  code: "DEFAULT001",
  address: "测试地址" # 其他必填字段根据你的Fedena版本调整
)

执行完后退出控制台(输入exit)。

2. 修改插件安装的Rake任务,添加学校上下文初始化

插件安装任务在执行seeds.rb时没有设置学校上下文,导致调用需要多学校支持的方法时出错。我们需要在任务执行前手动设置当前学校。

找到/root/fedena/lib/tasks/fedena_plugin_install.rake文件,找到调用seeds.rb的代码段(错误追踪里指向第31行附近),在加载seeds.rb之前添加以下代码:

# 在加载seeds.rb前初始化学校上下文
School.skip_multischool do
  # 找到第一个学校,不存在就创建
  default_school = School.first || School.create!(
    name: "默认学校",
    code: "DEFAULT_SCHOOL",
    address: "默认地址"
  )
  # 设置当前线程的学校上下文
  MultiSchool.current_school = default_school
end

# 原来加载seeds.rb的代码
load "#{Rails.root}/db/seeds.rb"

这里用School.skip_multischool是因为创建学校本身不需要多学校上下文,避免递归触发同样的异常。

3. 重新执行插件安装命令

保存修改后,回到终端执行:

rake fedena:plugins:install_all RAILS_ENV=production # 环境根据你的实际情况调整

为什么这个方法有效?

Fedena的acts_as_multi_school插件要求所有模型查询都在指定的学校上下文中执行,但Rake任务默认不会自动初始化这个上下文。我们通过手动创建/获取学校实例,并设置MultiSchool.current_school,让后续的数据库操作都能找到对应的学校ID,从而避免异常。

内容的提问来源于stack exchange,提问作者hanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 03:07:39