【问题标题】:what does this ruby error with <<~ and &. mean?<<~ 和 & 的这个红宝石错误是什么?意思是?
【发布时间】:2021-04-27 19:56:04
【问题描述】:

复兴和旧代码库。将其安装在新的 docker env 中。当我启动应用程序时,我收到此错误。我不是红宝石人,不知道这是什么

WARNING: If you plan to load any of ActiveSupport's core extensions to Hash, be
sure to do so *before* loading Sinatra::Application or Sinatra::Base. If not,
you may disregard this warning.

Set SINATRA_ACTIVESUPPORT_WARNING=false in the environment to hide this warning.
rake aborted!
SyntaxError: /usr/local/bundle/gems/database_cleaner-active_record-2.0.0/lib/database_cleaner/active_record/base.rb:22: syntax error, unexpected <<
        <<~SQL
          ^
/usr/local/bundle/gems/database_cleaner-active_record-2.0.0/lib/database_cleaner/active_record/base.rb:62: syntax error, unexpected '.'
...veRecord::Base.configurations&.configs_for(name: db)&.config...
...                               ^
/usr/local/bundle/gems/database_cleaner-active_record-2.0.0/lib/database_cleaner/active_record/base.rb:62: syntax error, unexpected '.'
...ations&.configs_for(name: db)&.configuration_hash
...                               ^
/usr/local/bundle/gems/database_cleaner-active_record-2.0.0/lib/database_cleaner/active_record/transaction.rb:1:in `require'
/usr/local/bundle/gems/database_cleaner-active_record-2.0.0/lib/database_cleaner/active_record/transaction.rb:1:in `<top (required)>'
/usr/local/bundle/gems/database_cleaner-active_record-2.0.0/lib/database_cleaner/active_record.rb:3:in `require'
/usr/local/bundle/gems/database_cleaner-active_record-2.0.0/lib/database_cleaner/active_record.rb:3:in `<top (required)>'
/usr/local/bundle/gems/database_cleaner-2.0.1/lib/database_cleaner.rb:1:in `require'
/usr/local/bundle/gems/database_cleaner-2.0.1/lib/database_cleaner.rb:1:in `<top (required)>'
/app/config/environments/shared.rb:9:in `<top (required)>'
/app/tasks/db.rake:2:in `require_relative'
/app/tasks/db.rake:2:in `block in <top (required)>'
/usr/local/bundle/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
Tasks: TOP => dl:start:all => dl:start:job_queue => dl:start:queue => environment
(See full trace by running task with --trace)

【问题讨论】:

  • 第一个是“波浪形的heredoc”(“
  • 我确实尝试在 ruby​​:latest 上构建它并得到了这些错误。听起来像是 json gem generator.c 使用的缺少某些类型定义:在函数“generate_json”中:generator.c:861:25:错误:“rb_cFixnum”未声明(在此函数中首次使用);你的意思是“mFixnum”吗? } else if (klass == rb_cFixnum) { ^~~~~~~~~~ mFixnum generator.c:861:25: 注意:每个未声明的标识符对于它出现在 generator.c:863 中的每个函数只报告一次: 25: 错误: 'rb_cBignum' 未声明(在此函数中首次使用)

标签: ruby rubygems


【解决方案1】:

正如engineersmnky 已经在评论中指出的那样,两个运算符——波浪形的heredocs (&lt;&lt;~) 和安全导航运算符(&amp;.)——都是在Ruby 2.3 版中引入的。这意味着您的应用程序至少需要 Ruby 2.3 并且不支持旧版本。

同时,当您将 Ruby 环境更新到最新版本时,您的应用程序会抱怨缺少 FixnumBignum。这两个类在 Ruby 2.4 中都被弃用了,并在不久之后被删除。这意味着您的应用程序不支持 Ruby 2.4 或更高版本。

也就是说:看起来您的应用程序只能在 Ruby 2.3 上运行。我建议安装最新的 Ruby 2.3 版本 2.3.8 然后再试一次。

请注意,即使是 2.3.8 版本也已经超过两年半了,而且 Ruby 2.3 已经结束生命周期,没有得到维护,并且不会再获得任何错误修复或安全更新。即使您的应用程序使用 Ruby 2.3.8,我也强烈建议您将其更新到 Ruby 2.7.3 甚至更好的 Ruby 3.0.1

【讨论】:

    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2016-05-07
    • 2012-08-27
    • 1970-01-01
    相关资源
    最近更新 更多