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

Hyrax 3升级至4后遇HydraEditor常量未初始化错误求助

Hyrax 3升级到Hyrax 4时uninitialized constant HydraEditor::Form::Permissions错误排查

问题概况

  • 团队将基于Hyrax的应用从3版本升级至4版本后,触发uninitialized constant HydraEditor::Form::Permissions错误
  • Gemfile已明确引入hydra-editor ~>6.0,且执行bundle install确认gem已安装
  • 仅在Docker容器内手动执行gem install hydra-editor后,错误才会消失

相关配置文件

Dockerfile

FROM ruby:2.7.8

ENV BUNDLER_VERSION=2.4.7
ENV RAILS_VERSION=6.1.6.1
ENV FITS_VERSION=1.6.0
ENV NODE_VERSION=18
# 需与本地应用文件夹名称匹配
ENV PROJECT_PATH hyrax
ENV TZ="America/New_York"

USER root

RUN apt-get update && apt-get -y install \
    cron \
    postgresql-client \
    build-essential \
    vim \
    libreoffice \
    openjdk-11-jdk

# 使用JEMALLOC替代
# JEMalloc是Ruby的一种更快的垃圾回收器。
# -------------------------------------------------------------------------------------------------
RUN apt-get install -y libjemalloc2 libjemalloc-dev
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so

# ImageMagic转换与FFMPEG转换
# -------------------------------------------------------------------------------------------------
RUN apt-get install -y imagemagick ghostscript ffmpeg mediainfo libgs-dev 

# 修改ImageMagick的安全策略,允许读写PDF文件
RUN sed -i 's/policy domain="coder" rights="none" pattern="PDF"/policy domain="coder" rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
# -------------------------------------------------------------------------------------------------

# FITS工具
# -------------------------------------------------------------------------------------------------
RUN mkdir -p /home/fits && \
    cd /home/fits \
    && wget https://github.com/harvard-lts/fits/releases/download/${FITS_VERSION}/fits-${FITS_VERSION}.zip -O fits.zip \
    && unzip fits.zip \
    && rm fits.zip \
    && chmod a+x /home/fits/fits.sh
ENV PATH="${PATH}:/home/fits"

# Node.js环境
# -------------------------------------------------------------------------------------------------
RUN curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - \
    && apt-get -y install nodejs

# yarn包管理工具
# -------------------------------------------------------------------------------------------------
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -\
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
    && apt-get install -y yarn

RUN mkdir -p /home/${PROJECT_PATH}/
WORKDIR /home/${PROJECT_PATH}
ADD ./${PROJECT_PATH} /home/${PROJECT_PATH}

RUN \
  gem update --system --quiet && \
  gem install bundler -v ${BUNDLER_VERSION} && \
  bundle install --jobs=4 --retry=3

Gemfile

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.7.8'

# Rails框架依赖
# ==============================================================================
gem 'pg', '~> 1.1'
gem 'puma'
gem 'rails', '~> 6.1.6', '>= 6.1.6.1'
gem 'webpacker'

# 通过缓存减少启动时间;需在config/boot.rb中配置
gem 'bootsnap', '>= 1.4.4', require: false

# 应用专属依赖
# ==============================================================================

# 后台任务处理
# =====================================================
gem 'sidekiq'
gem "sidekiq-cron", "~> 1.1"
gem 'sidekiq-failures'

# 用户认证
# =====================================================
gem 'devise'
gem 'devise-guests', '~> 0.8'
gem 'devise_cas_authenticatable'

# 用户管理
# =====================================================
gem 'samvera-persona', git: 'https://github.com/wvulibraries/samvera-persona', branch: 'hyrax-4'

gem 'sass-rails', '>= 6'
gem 'jsbundling-rails'
# Turbolinks可提升Web应用的导航速度,详情见:https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# 便捷构建JSON API,详情见:https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.7'

# 生产环境使用Redis适配器运行Action Cable
gem 'redis', '~> 4.0'

# https://github.com/redis/hiredis-rb
gem 'hiredis' # 可选

# 用于会话存储
gem 'redis-actionpack'

# 使用Active Model的has_secure_password功能
# gem 'bcrypt', '~> 3.1.7'

# 使用Active Storage变体功能
# gem 'image_processing', '~> 1.2'

# 健康检查工具
# =====================================================
gem 'okcomputer'

# Windows系统不包含时区信息文件,因此引入tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

# Hydra生态依赖
# =====================================================
gem 'hydra-role-management'
gem 'hydra-editor', '~> 6.0'

# Hyrax框架依赖
# =====================================================
gem 'hyrax', '~> 4'
gem 'rsolr', '>= 1.0', '< 3'

gem 'bootstrap', '~> 4.0'
gem 'twitter-typeahead-rails', '0.11.1.pre.corejavascript'
gem 'jquery-rails'
gem 'openseadragon', '>= 0.2.0'
gem 'riiif', '~> 2.1'

# 用于在视图中展示PDF文件的pdfjs
gem 'pdfjs_viewer-rails'

# Bulkrax批量导入工具
# =====================================================
gem 'bulkrax'

group :development do
  # 在异常页面或代码中任意位置调用'console'即可访问交互式控制台
  gem 'web-console', '>= 4.1.0'
  # 在浏览器中展示每个请求的性能信息,如SQL耗时、火焰图等
  # 可配置为在生产环境使用,详情见:https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md
  gem 'rack-mini-profiler', '~> 2.0'
  gem 'listen', '~> 3.3'
  # Spring通过在后台保持应用运行来加速开发,详情见:https://github.com/rails/spring
  gem 'spring'
end

group :test do
  # 为Capybara系统测试和selenium驱动提供支持
  gem 'capybara', '>= 3.26'
  gem 'selenium-webdriver', '>= 4.0.0.rc1'
  # 便捷安装和使用Web驱动来运行浏览器系统测试
  gem 'webdrivers'
end

group :development, :test do
  # 在代码中任意位置调用'byebug'即可暂停执行并进入调试控制台
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]  
  gem 'solr_wrapper', '>= 0.3'
  gem 'factory_bot_rails'
  gem 'faker'  
  gem 'fcrepo_wrapper'
  gem 'rspec-rails'
end

错误截图

错误截图

解决方案

1. 修正Dockerfile中的Bundler路径配置

Docker容器中bundle install可能将gem安装到非系统默认路径,导致Rails无法加载。在Dockerfile中添加路径配置,强制gem安装到项目目录:

RUN \
  gem update --system --quiet && \
  gem install bundler -v ${BUNDLER_VERSION} && \
  bundle config set path 'vendor/bundle' && \
  bundle install --jobs=4 --retry=3

2. 锁定hydra-editor具体版本

Hyrax 4对依赖版本兼容性要求严格,将Gemfile中的hydra-editor改为锁定具体版本,避免自动更新到不兼容的小版本:

gem 'hydra-editor', '6.0.0'

3. 清理Docker缓存重新构建

Docker可能缓存了旧的gem安装层,导致新的bundle install未生效。执行构建时跳过缓存:

docker build --no-cache -t your-app-image .

4. 验证容器内gem加载状态

进入容器后,确认hydra-editor的安装路径,并测试Rails是否能加载目标常量:

docker exec -it your-app-container bash
# 查看gem安装路径
bundle show hydra-editor
# 进入Rails控制台测试加载
rails console
> HydraEditor::Form::Permissions

5. 确认Rails加载配置

检查config/boot.rb中是否存在Bundler初始化代码,确保Rails使用bundler管理的gem:

ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
require 'bundler/setup' # Set up gems listed in the Gemfile.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:45:54