Ruby on Rails 遗留应用程序更新生成 Gem Psych Alias 错误 Psych::BadAlias

use*_*682 10 ruby rubygems ruby-on-rails

目标:按照 RailsGuides 的建议逐步升级遗留应用程序:升级 Ruby on Rails(从 ruby​​ 2.3.1 和rails 4.2.2)

预期结果:rake assets:precompile成功完成,没有 gem psych 别名错误:Psych::BadAlias

需要帮助:有人可以告诉我如何实施推荐的解决方案:Psych::AliasesNotEnabled: Alias parsing was not enabled. To enable it, pass `aliases: true` to `Psych::load` or `Psych::safe_load` 。(a) 代码是什么,(b) 它属于哪个文件。完整详细信息如下。

实际结果:

我正在从 ruby​​ 2.3.1 和 Rails 4.2.2 更新应用程序:我逐步完成了主要的 ruby​​ 修订版,即 2.4、2.5、2.6,目前正在运行 2.7.0 我将 Rails 更新为,然后出现了~> 5.0psych gem 的问题:

问题:运行:rake assets:precompile导致:rake aborted! / Psych::BadAlias: Cannot load database configuration / Unknown alias: default / Caused by: Psych::BadAlias: Unknown alias: default / error: Precompiling assets failed

推荐的解决方案是:Psych::AliasesNotEnabled: Alias parsing was not enabled. To enable it, pass `aliases: true` to `Psych::load` or `Psych::safe_load`

我了解到 psych 3.1.0 是一个“默认 gem”(当我尝试删除/重新安装 psych 时,因为它不在我的 Gemfile 或 Gemfile.lock 中)。因此,我添加gem 'psych', '~> 5.0', '>= 5.0.1'到 Gemfile 并安装它,运行bundle install,然后 ```rake assets:precompile`` ——这返回了相同的心理别名错误。

不幸的是,我不知道如何pass `aliases: true` to `Psych::load` or `Psych::safe_load`

此 SO Q&A 接受的答案很有帮助:visit_Psych_Nodes_Alias: Unknown alias: default (Psych::BadAlias)

将推荐添加module YAMLlib/yaml.rb(正确的位置?)并没有解决问题。

我做了更多研究并发现了一个 Rails 补丁:https: //discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017注意到 Rails 5.2.8.1(除其他外,“已修复”)。所以我升级到rails 5.2.8.1,错误仍然存​​在。

然后,由于上面引用的 SO 问答以“Rails 用户注意事项 (>= 7.0.3.1)”结束,并且 Rails 补丁表示 Rails 7.0.3.1 是“固定版本”,因此我升级到 Rails 7.0.3.1 并添加了推荐代码 - 来自注释 - 解决心理问题:

  # config/initializers/activerecord_yaml.rb
  ActiveRecord.use_yaml_unsafe_load = true
Run Code Online (Sandbox Code Playgroud)

它不起作用。 rails app:update建议进行大量更改,并且在运行时rake assets:precompile,我收到一个不相关的 sprockets / popper.js 错误(堆栈中可能比心理错误更高)。因此,我将应用程序降级到 Rails 5.2.8.1(使用 ruby​​ 2.7.0),并且在运行时再次出现 psych 别名错误rake assets:precompile

希望解决方案就像有人告诉我如何实施推荐的解决方案一样简单:Psych::AliasesNotEnabled: Alias parsing was not enabled. To enable it, pass `aliases: true` to `Psych::load` or `Psych::safe_load`

另外,逐步升级我的代码的合理方法是什么。即,一旦 Rails 5.2.8.1 解决了这个问题,我是否应该跳到下一个修复版本(6.0.5.1)?SO Q&A 针对不同版本的 ruby​​ 建议使用不同版本的 psyc;这些问题还与不同版本的 Rails 有关。

预先感谢您的帮助。(经过三年多的休息后,我又重新开始编码。)

小智 4

使用低于 4 的 psych 版本,它应该可以再次工作。这是因为 v4 中 PSYCH:load 发生了重大变化。如果您想使用较新的版本,则需要 aliases: true...我也在升级旧的 Rails 应用程序。它开始在升级轨道 5.0 到 5.1 上崩溃