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

在GitHub Codespace运行Canvas-LMS时遇TypeError: Post is not a class错误

解决Canvas-LMS资产编译时TypeError: Post is not a class的冲突问题

问题根源

错误由multipart-post第三方库的Post类与Canvas自身代码中Multipart::Post模块的命名冲突导致,Ruby 2.7.0的常量解析机制会优先加载第三方库的常量,使得Canvas内部调用时无法识别正确的类定义。

修复方案

方案一:锁定兼容版本(推荐)

  1. 打开项目根目录下的Gemfile,添加或修改multipart-post的版本约束:
    gem 'multipart-post', '~> 2.1.1'
    
  2. 更新并安装指定版本的依赖:
    bundle update multipart-post
    bundle install
    
  3. 清理资产缓存后重新编译:
    bundle exec rails assets:clean
    bundle exec rails canvas:compile_assets
    
  4. 编译完成后继续执行初始化流程:
    bundle exec rails db:initial_setup
    

方案二:修改源码显式指定命名空间(仅当方案一无效时使用)

在触发错误的代码文件中,将直接调用的Post改为Canvas自身的完整命名空间Multipart::Post,例如:

# 替换原有Post.new(...)的调用
Multipart::Post.new(your_params_here)

注意:此方法需要修改Canvas源码,后续升级Canvas时需同步检查该修改的兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:17:01