为什么 bundler 明明安装了 rake 却找不到?

Why can't bundler find rake when it's obviously installed?

我正在尝试将一个版本的 Redmine 从备份迁移到新服务器;我正在从 Redmine 3.2.3 迁移到 3.3.0。我在我的新服务器上安装了新版本的 Redmine(来自 Bitnami Stack)并且一切正常加载。当我将旧数据库移动到新版本时,我必须 运行

bundle exec rake db:migrate

迁移我的数据库。但是...即使 gem list 清楚地显示它已安装,捆绑程序也无法以某种方式找到 rake。我可以强制捆绑程序使用我安装的 rake 版本吗?

我应该提一下,我根本没有进行任何定制,没有安装任何 gem,也没有更改 ruby 版本或做任何事情。这是开箱即用的 Redmine。

我在提出问题后注意到我安装了两个版本的 rake。我删除了两个并重新安装了 rake 11.1.2 并遇到了同样的问题。

有两件事:

  • ruby gem 可用 gem list
  • ruby gem 通过捆绑器可用

当您使用 bundle 时,捆绑程序会从 Gemfile 中寻找 gem。您可以在系统中安装多个 gem,但是当您使用 Gemfile 时,gem 版本将从 Gemfile.lock

获取

总结:

  • $ bundle exec rake ...

需要在 Gemfile

中有 rake gem
  • $ rake ...

它将在系统中安装最新版本的 rake gem

希望对你有所帮助

您可能使用了错误的 ruby 二进制文件。请注意,Bitnami Stacks 的安装程序是完全独立的,运行 独立于系统上安装的其余软件或库。

此外,查看您分享的屏幕截图,您在执行 ruby -v 时使用的是 ruby 1.9.3,而 Redmine Bitnami Stacks 使用 ruby 2.1。 9.可能这就是您遇到问题的原因。

如果您想使用 Bitnami Stack 附带的 ruby(和其他组件),您需要 运行 以下命令:

cd *INSTALLDIR*
./use_redmine

此命令将打开一个新的控制台会话,其中的环境配置为使用堆栈。

这就是我最终升级 Redmine 的方式:

Bitnami 提供的版本之外的 ruby 版本以某种方式安装在这台机器上以及另一个版本的捆绑器。我做的第一件事是卸载 apt-get 版本的捆绑器。我不得不手动删除 /usr/bin/bundler/usr/bin/bundle 以便 $ which bundle 即使在删除后也能停止查找捆绑程序。

我看到 Bitnami 堆栈的 ruby 是版本 2。1.x 但发现 Ruby 1.9.3 安装到 /usr/bin/ruby1.9.3/ $ which ruby。我拿了 the commands from here 并删除了那个版本的 Ruby。

运行 $ ruby -v 现在什么也没给我,因为 Ruby 不再安装(即使它在 Bitnami 堆栈中)。然后必须(重新?)将 Bitnami 的 Ruby 添加到我在 ~/.profile 中的路径中。 $ ruby -v 现在给我正确的版本。

$ gem list 不再告诉我安装了 rake。我尝试了 运行 $ bundle install ,其中 Gemfile 是但抱怨 mime-types 被锁定在较低版本并且不会做任何事情。我用 $ bundle update 解决了这个问题,但后来 运行 遇到了臭名昭著的 nokogiri 问题,它抱怨 nokogiri 所需的一切都没有安装。

因为我之前处理过这个问题(很多次),所以我转到 the Nokogiri Website's install page 并按照 Ubuntu 上的故障排除说明进行操作:

sudo apt-get install build-essential patch
sudo apt-get install ruby-dev zlib1g-dev liblzma-dev

现在 $ bundle update 在我的 Gemfile 上工作。 Redmine 已升级,我的用户非常满意。