排查Ruby-on-Rails RuntimeError:Discourse数据库迁移模块缺失问题
问题:执行Discourse数据库迁移时出现MiniRacer::RuntimeError
我是Ruby-on-Rails新手,执行数据库迁移时遇到了RuntimeError。在/var/www/discourse目录下执行以下命令:
sudo -u www-data RAILS_ENV=production $ruby_path/bundle exec rake db:migrate --trace
出现如下错误:
MiniRacer::RuntimeError: Error: Could not find module `discourse/lib/utilities` imported from `(require)` JavaScript at missingModule (<anonymous>:247:11) JavaScript at findModule (<anonymous>:258:7) JavaScript at requireModule (<anonymous>:24:15) JavaScript at <anonymous>:26:11 /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/mini_racer-0.6.3/lib/mini_racer.rb:228:in `eval_unsafe' ...
Mini_racer已安装,但discourse/lib/utilities不存在于源码中。注:我知道Discourse官方推荐Docker部署,目前正在研究Ruby-on-Rails组件,以Discourse为调试对象。
以下是rvm info输出:
admin@rortest:/var/www/discourse$ rvm info ruby-3.1.3: system: uname: "Linux rortest 5.10.0-20-amd64 #1 SMP Debian 5.10.158-2 (2022-12-13) x86_64 GNU/Linux" name: "Debian" version: "11" architecture: "x86_64" bash: "/usr/bin/bash => GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)" zsh: " => not installed" remote_path: "debian/11/x86_64" rvm: version: "1.29.12 (latest)" updated: "1 hour 11 minutes 18 seconds ago" path: "/usr/local/rvm" autolibs: "[4] Allow RVM to use package manager if found, install missing dependencies, install package manager (only OS X)." ruby: interpreter: "ruby" version: "3.1.3p185" date: "2022-11-24" platform: "x86_64-linux" patchlevel: "2022-11-24 revision 1a6b16756e" full_version: "ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]" homes: gem: "/usr/local/rvm/gems/ruby-3.1.3" ruby: "/usr/local/rvm/rubies/ruby-3.1.3" binaries: ruby: "/usr/local/rvm/rubies/ruby-3.1.3/bin/ruby" irb: "/usr/local/rvm/rubies/ruby-3.1.3/bin/irb" gem: "/usr/local/rvm/rubies/ruby-3.1.3/bin/gem" rake: "/usr/local/rvm/rubies/ruby-3.1.3/bin/rake" environment: PATH: "/usr/local/rvm/gems/ruby-3.1.3/bin:/usr/local/rvm/gems/ruby-3.1.3@global/bin:/usr/local/rvm/rubies/ruby-3.1.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/rvm/bin" GEM_HOME: "/usr/local/rvm/gems/ruby-3.1.3" GEM_PATH: "/usr/local/rvm/gems/ruby-3.1.3:/usr/local/rvm/gems/ruby-3.1.3@global" MY_RUBY_HOME: "/usr/local/rvm/rubies/ruby-3.1.3" IRBRC: "/usr/local/rvm/rubies/ruby-3.1.3/.irbrc" RUBYOPT: "" gemset: ""
解决建议
同步依赖版本
本地Discourse源码与mini_racer版本可能不匹配,执行命令更新依赖:bundle install --deployment --without test development预编译前端资源
Discourse的JavaScript模块需预编译才能被MiniRacer识别,执行:RAILS_ENV=production bundle exec rake assets:precompile确认源码完整性
检查本地仓库是否有文件缺失或未拉取的更新:git fetch origin git reset --hard origin/main验证Ruby路径
确保$ruby_path指向正确的Ruby版本路径,避免版本冲突:echo $ruby_path # 需与rvm info输出的ruby路径一致清理缓存
清除旧缓存解决模块引用异常:bundle clean --force RAILS_ENV=production bundle exec rake tmp:clear
内容的提问来源于stack exchange,提问作者user371793
相关产品推荐
相关产品推荐

