官方指引参考:https://github.com/instructure/canvas-lms/wiki/Upgrading
登录服务器后切换至 Canvas 安装目录,在升级 Canvas 之前,首先停止相关服务,防止升级过程中发生失误损坏数据,切勿在升级 Ruby 或 Bundler 之后关闭相关服务,将无法执行。
$ sudo /etc/init.d/canvas_init restart
$ sudo /etc/init.d/apache2 stop
$ RAILS_ENV=production /data/canvas/script/delayed_job stop
$ sudo systemctl stop postgresql
Git Pull
注意以下命令会覆盖当前 Canvas 安装实例的所有自定义修改内容。
$ git fetch && git reset --hard origin/prod
如升级过程中遇到 ruby 版本报错,首先卸载先前版本,通过如下命令查看已安装版本:
$ sudo apt list --installed | grep ruby
执行卸载,例如 3.1 版本:
$ sudo apt remove ruby3.1 ruby3.1
安装 Ruby-3.3
$ sudo apt install ruby3.3 ruby3.3-dev
$ sudo apt autoremove
安装 Bundler 2.5.22
$ sudo gem install bundler -v 2.5.22
安装 Canvas 新版本依赖
$ bundle _2.5.22_ install
--- or ---
$ bundle install
升级 Node
如果当前 Node 版本不符合最新版本 Canvas 要求,通过传送门进行升级。
更新 browsers-list
$ npx update-browserslist-db@latest
编译素材
首先启动数据库:
sudo systemctl start postgresql
$ RAILS_ENV=production bundle exec rake canvas:compile_assets
编译结果如图所示:
升级数据库
升级数据库之前,先暂停缓存相关配置:
$ cd /where_is_your_canvas_installed
$ mv config/cache_store.yml cache_store.yml.bak
$ mv config/redis.yml redis.yml.bak
开始执行数据库 migration
$ RAILS_ENV=production bundle exec rake db:migrate:predeploy
$ RAILS_ENV=production bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec rake db:load_notifications
升级过程如图所示:
常见问题:
问题1: bundler
$ bundle -v
/usr/local/bin/bundle:25:in `load': cannot load such file -- /usr/lib/ruby/gems/3.3.0/gems/bundler-2.5.22/exe/bundle (LoadError) ...
解决:
$ sudo gem install bundler -v 2.5.22
问题2: RAILS_ENV=production bundle exec rake canvas:compile_assets 报错
rake aborted!
Parallel::UndumpableException: NameError: uninitialized constant ApiRouteSet (Parallel::UndumpableException)