如何解决使用 rubymine 和 docker 设置 rubocop
我正在 docker 上运行一个 rails 应用程序,我现在想启用 rubocop,但是当我尝试时,我得到了以下内容。
Error:bundler: failed to load command: rubocop
(/Users/name/.rbenv/versions/3.0.1/bin/rubocop)
/Users/name/.rbenv/versions/3.0.1/lib/ruby/3.0.0/bundler/spec_set.rb:41:in `block in for':
Unable to find a spec satisfying nokogiri (>= 1.8.5) in the set. Perhaps the lockfile is
corrupted? Found nokogiri (1.11.4-x86_64-linux) that did not match the current platform.
在容器内我得到以下内容
ruby -v
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-linux]
which bundler
/usr/local/bundle/bin/bundler
在我机器上的容器外
ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
which bundler
/usr/bin/bundler
据我了解,rubocop 在容器安装的 gem 上查找 nokogiri,因此找不到正确的版本,我可以安装另一个 nokogiri gem 以供容器外的 rubocop 使用吗?
解决方法
RuboCop 对 nokogiri 没有任何依赖,所以感觉当 bundler 尝试运行 rubocop
时,它报告了一个更普遍的问题。
初始错误消息中的 /Users/name/.rbenv/versions/3.0.1/
路径是容器内的路径还是本地计算机上的路径?对我来说,它看起来像后者——这意味着你的 Ruby 3.0.1 本地 rbenv 副本可能没有你的应用程序和 RubyMine 基于你的项目的 Gemfile 期望它的全套 gem。
在 RubyMine 的设置中,您可以将项目设置为使用您的容器(首选项 > 语言和框架 > Ruby SDK 和 Gems)。如果您的 Rails 应用在容器中运行,您可以创建一个远程 SDK,RubyMine 将同步相同 gem(包括 RuboCop)的本地副本供自己使用。
过去我在使用 RubyMine 的同步 gem 时遇到了各种问题,有时会改为使用基于 rbenv 的本地 Ruby 环境。但是,如果您沿着这条路线走下去,则意味着您必须自己维护该 Ruby 版本的 gemset,这意味着您将失去使用 docker 容器进行开发的许多好处。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。