Bundler正在使用为不同的gem创建的binstub.

joh*_*ino 4 ruby ruby-on-rails bundler

当我使用rails控制台时

rails console
Run Code Online (Sandbox Code Playgroud)

一切都好.

当我使用rails控制台时

bundle exec rails console
Run Code Online (Sandbox Code Playgroud)

我收到以下警告

Bundler is using a binstub that was created for a different gem.
This is deprecated, in future versions you may need to `bundle binstub my_gem` to work around a system/bundle conflict.
Run Code Online (Sandbox Code Playgroud)

my_gem 碰巧是我创建的一个宝石,它完全不相关,在当前项目目录中没有使用.

我已经尝试过这个问题的每个解决方案都没有运气: Bundler正在使用为不同的gem创建的binstub

我将非常感谢有关删除此警告或帮助理解binstub如何工作的任何指导,以便我可以弄清楚发生了什么.

Cez*_*ski 5

如今,项目通常具有"专用"版本的工具.例如,在某些项目中,可能希望使用"spring"运行"rails"命令(以更快地启动).

因此,在项目的'bin'目录中生成文件并在运行命令时使用这些版本并不罕见,所以例如而不是

bundle exec rails console
Run Code Online (Sandbox Code Playgroud)

要么

bundle exec spring rails console
Run Code Online (Sandbox Code Playgroud)

您可以简单地期望以下内容正常工作

bin/rails console
Run Code Online (Sandbox Code Playgroud)

而不关心项目是否需要春天或捆绑或宙斯或其他什么.

因此,如果项目中没有"bin/rails",则应生成适合项目的项目,例如使用

bin/rake rails:update:bin
Run Code Online (Sandbox Code Playgroud)

如果您还没有bin/rake,则可能需要使用

bundle exec rake rails:update:bin
Run Code Online (Sandbox Code Playgroud)

(所以你的bin/rake命令也会因使用spring而加速)

有些人甚至放入./bin他们的路径,所以无论何时他们运行rake(或其他),./bin/rake如果它存在,他们实际上运行.

故障排除

  1. 对于项目特定任务,使用bin/*文件,在需要时创建它们(例如使用Rails中的特殊rake任务或使用bundle binstub <gemname>) - 通常那些具有Bundler特定线路的Bundler将使Bundler满意.

  2. 对于非项目宝石(比如你的宝石),找出它的位置(例如which mygem)并查看它的内容 - 它可能正在使用例如"bundler/setup",这使Bundler感到困惑(因为bundler需要一个本地的Gemfile文件).也许你的宝石正在使用捆绑器(如果它是一种"全局"工具而不是"项目"工具则不应该).

  3. 此外,如果您正在使用它们,请检查RVM和.rbenv等工具是否正确地将其内容添加到您的bin文件中(它们通常需要设置特定路径)

  4. 如果你仍然有问题,最好发布bin文件的内容导致问题 - 这是一个普通的Ruby文件,所以如果有什么问题,通常是因为文件内容(而不是其他任何东西).

更多信息:https://github.com/sstephenson/rbenv/wiki/Understanding-binstubs