Bundler 说捆绑没问题,但不会 运行 代码

Bundler says the bundle is ok but won't run the code

当我 运行 捆绑检查时,它说:

ubuntu@ip:/opt/bluecopper/current$ /opt/default-ruby/bundle check
fatal: Not a git repository (or any of the parent directories): .git
The Gemfile's dependencies are satisfied

当我列出宝石时,我得到:

ubuntu@ip:/opt/bluecopper/current$ /opt/default-ruby/bundle list
fatal: Not a git repository (or any of the parent directories): .git
Gems included by the bundle:
  * aws-sdk-v1 (1.64.0)
  * bluecopper (0.1.0)
  * bundler (1.10.5)
  * dotenv (2.0.2)
  * json (1.8.3)
  * mini_portile (0.6.2)
  * multi_json (1.11.1)
  * nokogiri (1.6.6.2)
  * rollbar (1.5.3)
  * thor (0.19.1)

但是当我真正尝试 exec 它说的是:

ubuntu@ip:/opt/bluecopper/current$ /opt/default-ruby/ruby -S bundle exec bluecopper start -c app-config.yml 
fatal: Not a git repository (or any of the parent directories): .git
Could not find json-1.8.3 in any of the sources
Run `bundle install` to install missing gems.

知道如何解决这个问题吗?没有意义。

在前两个命令中您使用 /opt/default-ruby/bundle 但在最后一个命令中 /opt/default-ruby/ruby -S bundle.

我会尝试使用 /opt/default-ruby/bundle exec bluecopper start -c app-config.yml。这可能与 ruby -S 更改 $PATH 有关。

bluecopper 可执行文件有一个 shebang:

#!/usr/bin/env ruby

这个,当用 bundle exec 调用时,命令使用系统 ruby 而不是预期的 /opt/default-ruby/ruby,修复是更改路径以预先添加 /opt/default-ruby这样 /usr/bin/env ruby 就会选择正确的。