ope*_*per 6 ruby rubygems ruby-on-rails ruby-on-rails-5
最近upgrade to rails 7.0.2 from rails 5.2,当我在开发模式下启动 Rails 控制台或 Rails 服务器时,我会看到这些警告
/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
Run Code Online (Sandbox Code Playgroud)
无论如何,警告在应用程序打开时不会出现,Rails 7.0而仅在应用程序升级到Rails 7.0.2
我按照指南升级了导轨
5.2 -> 6.0 -> 6.1 -> 7.0 -> 7.0.2
也许我错过了一些东西,无论如何我可以解决这些问题吗?也许这些会随着 ruby/rails 后续升级而消失?
谢谢。
Rails 7.0.1 为标准库添加了一些 gem 依赖项,这些依赖项将在 ruby 3.0 中删除。不幸的是,这会导致 ruby 2.7.6 出现问题。您可以通过多种方式解决这个问题。升级 ruby 也会升级捆绑器,从而解决该问题。在没有 ruby 的情况下升级捆绑器也可以,但我不推荐它(最好指出系统版本)。更保守的解决方法是找到导致问题的 gem,并将它们列在您的Gemfile. 就我而言,我必须确保 gem 版本与默认的 ruby gem 版本相同。例如,我必须使 Gemfile 具有gem "uri", "0.10.0". 调试导致这些问题的一个好方法是将其放在 Gemfile 的顶部:
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
Run Code Online (Sandbox Code Playgroud)
这样,您就可以获得需要 stdlib 文件且也存在冲突 rubygem 的位置的堆栈跟踪。
cla*_*ked -1
看起来这些都是依赖代码 gem 中定义的常量。在遇到此问题时,运行 bundle clean --force或更新依赖项bundle update,然后运行可以解决某些问题。bundle clean --force
| 归档时间: |
|
| 查看次数: |
3016 次 |
| 最近记录: |