首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将应用程序从Rails 5升级到Rails 7时的警告

将应用程序从Rails 5升级到Rails 7时的警告
EN

Stack Overflow用户
提问于 2022-04-04 07:51:08
回答 2查看 1.1K关注 0票数 4

使用最近的upgrade to rails 7.0.2 from rails 5.2,当我以dev模式启动rails控制台或rails服务器时,我会看到以下警告

代码语言:javascript
运行
复制
/Users/opensource/.rvm/gems/ruby-2.7.4/gems/digest-3.1.0/lib/digest.rb:20: warning: already initialized constant Digest::REQUIRE_MUTEX
/Users/opensource/.rvm/rubies/ruby-2.7.4/lib/ruby/2.7.0/digest.rb:6: warning: previous definition of REQUIRE_MUTEX was here
/Users/opensource/.rvm/rubies/ruby-2.7.4/lib/ruby/2.7.0/net/protocol.rb:66: warning: already initialized constant Net::ProtocRetryError
/Users/opensource/.rvm/gems/ruby-2.7.4/gems/net-protocol-0.1.3/lib/net/protocol.rb:68: warning: previous definition of ProtocRetryError was here
/Users/opensource/.rvm/rubies/ruby-2.7.4/lib/ruby/2.7.0/net/protocol.rb:206: warning: already initialized constant Net::BufferedIO::BUFSIZE
/Users/opensource/.rvm/gems/ruby-2.7.4/gems/net-protocol-0.1.3/lib/net/protocol.rb:208: warning: previous definition of BUFSIZE was here
/Users/opensource/.rvm/rubies/ruby-2.7.4/lib/ruby/2.7.0/net/protocol.rb:503: warning: already initialized constant Net::NetPrivate::Socket
/Users/opensource/.rvm/gems/ruby-2.7.4/gems/net-protocol-0.1.3/lib/net/protocol.rb:504: warning: previous definition of Socket was here
/Users/opensource/.rvm/gems/ruby-2.7.4/gems/apipie-rails-0.7.0/lib/apipie/extractor/recorder.rb:163: warning: Skipping set of ruby2_keywords flag for process (method accepts keywords or method

值得注意的是,当应用程序在Rails 7.0上时不存在警告,而只有当应用程序升级到Rails 7.0.2时才会出现警告

我按照指南升级了rails

5.2 -> 6.0 -> 6.1 -> 7.0 -> 7.0.2

可能是我错过了什么,不管怎样,我能修好这些?这些可能会随着ruby / rails随后的升级而消失吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2022-04-19 15:57:17

Rails 7.0.1为在ruby3.0中删除的标准库内容添加了一些gem依赖项。不幸的是,这导致了ruby 2.7.6的问题。你可以从几个方面解决这个问题。升级红宝石也将升级邦德勒,解决这一问题。升级不带ruby的bundler也有效,但我不推荐它(最好是指向系统版本)。一个更保守的解决方法是找到引起问题的宝石,并将它们列在Gemfile的顶部。在我的例子中,我必须确保gem版本与默认的ruby版本相同。例如,我必须使Gemfile具有gem "uri", "0.10.0"。调试导致这些问题的一个好方法是将其放在Gemfile的顶部:

代码语言:javascript
运行
复制
Warning.module_eval do
  alias_method :original_warn, :warn

  def warn(msg)
    if msg.match?(/already initialized constant/)
      raise msg
    else
      original_warn(msg)
    end
  end
end

通过这种方式,您可以获得需要stdlib文件的位置的堆栈跟踪,而stdlib文件也具有冲突的rubygem。

票数 3
EN

Stack Overflow用户

发布于 2022-04-04 21:32:34

看起来这些都是在依赖项代码gems中定义的常量。在遇到此问题时,运行bundle clean --force或使用bundle update更新依赖项,然后运行bundle clean --force,对于一些人来说是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71733707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档