【问题标题】:heroku: command not foundheroku:找不到命令
【发布时间】:2011-07-14 00:38:08
【问题描述】:

这似乎已经在How do I use gems with Ubuntu? 以及其他答案中得到解决,但似乎没有一个解决方案对我有用。

我使用的是 Mac OSX 10.6

我已经使用 bundler 安装了 heroku。下面显示了我的 gem 环境和路径 - 我尝试将 EXECUTABLE DIRECTORY 和 GEM PATHS 中列出的文件夹添加到我的 $PATH 中,但是当我从我的 rails 项目中键入 heroku 时,我总是找不到命令。

$ bundle show heroku
/Library/Ruby/Gems/1.8/gems/heroku-1.18.3

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 1.6.1
  - RUBY VERSION: 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/1.8
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-10
  - GEM PATHS:
     - /Library/Ruby/Gems/1.8
     - /Users/iantinsley/.gem/ruby/1.8
     - /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/iantinsley/bin:/usr/local/bin:/usr/bin

$ heroku
-bash: heroku: command not found

非常感谢任何帮助

【问题讨论】:

  • 你能剪切-n-粘贴命令并输出失败的东西吗? :)
  • bundle exec heroku 工作吗?
  • 是的,bundle exec 工作正常,我可以接受。从 /Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin 运行 heroku 失败,因为没有加载依赖项。我在“答案”中详细说明了所有这些,但有人删除了它 - 不知道为什么。
  • @user656510,感谢您更新帖子,非常好。可惜你的附录被删除了。如果您可以编辑帖子以包含堆栈跟踪,那将很有用。 :) 我猜你需要在RUBYLIB 环境变量中添加一些目录(有关详细信息,请参阅ruby(1) 联机帮助页),以便 Ruby 可以找到所需的包,但没有看到具体的错误消息,它会很难知道我是否走在正确的轨道上。

标签: ruby macos heroku gem


【解决方案1】:

sudo 中使用以下命令卸载然后重新安装它。我使用的是 macOS 10.14。

curl https://cli-assets.heroku.com/install.sh | sh

我最初使用自制软件安装它,但总是出现command not fund 错误。原因可能是curl安装在官方文档中提到的两个目录下设置的。

要快速设置到 /usr/local/lib/heroku 和 /usr/local/bin/heroku,请运行此脚本(脚本需要 sudo 且不兼容 Windows)

【讨论】:

    【解决方案2】:

    通过从http://toolbelt.heroku.com 重新安装 Heroku Toolbelt 来修复它

    【讨论】:

      【解决方案3】:

      默认情况下,Mac 上的 ruby​​gems 将可执行文件安装到 /usr/bin,而不是位于 /Library/Ruby/Gems 的 gem 目录下。但是,这些目录具有不同的权限:

      ~ $ ls -ld /usr/bin/ /Library/Ruby/Gems/
      drwxrwxr-x     4 root  admin    136 15 Nov 22:19 /Library/Ruby/Gems/
      drwxr-xr-x  1085 root  wheel  36890 11 Feb 22:57 /usr/bin/
      

      因此,尽管它们都归 root 所有,但 admin 组中的任何人都可以写入 gems 目录,而 /usr/bin 则不能。

      这里似乎发生的事情是捆绑器在安装 gem 时无法将 heroku 可执行文件安装到 /usr/bin 中,可能是因为这个权限问题。 This blog post 表明这是 OSX 上早期版本的 bundler 的问题。

      rubygems 安装的可执行文件只是 gem 的 bin 目录中的 heroku 脚本的副本(即/Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin)。相反,它是由 ruby​​gems 生成的包装脚本,它首先加载 ruby​​gems 以使其能够在 ruby​​ 加载路径上工作,因此当脚本本身被调用时,任何require 语句都能够找到适当的库。

      这意味着如果您直接调用脚本,rubygems 将不会被加载,因此加载路径将不会正确设置,并且如您所见,您将收到有关缺少依赖项的错误。为了证明这一点,请尝试运行

      $ ruby -rubygems /Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin/heroku
      

      它运行脚本但首先加载 ruby​​gems。这应该(可能 - 我不确定)有效。

      这也是bundle exec heroku 起作用的原因。 Bundler 根据需要设置加载路径。此外,这样做可确保将加载路径设置为与您的 Gemfile.lock 文件匹配 - 这确实是捆绑程序的重点。

      我不建议向您的 $PATH 添加任何内容。正如我们所见,它不起作用,而且每次升级到新版本的 heroku gem 时都需要更改它。

      我也建议不要向您的 $RUBYLIB 变量添加任何内容。这样做实际上可以让 heroku 命令正常工作,但使用 ruby​​gems 和 bundler 的全部意义在于它们会为你管理这样的东西。

      我的第一个建议是使用rvm。这是一个非常有用的工具,我认为值得花一些时间研究它。

      如果您不能或不愿意这样做,那么您可能需要重新安装 heroku gem,并检查它是否安装正确。首先删除现有的gem:

      $ sudo gem uninstall heroku
      

      然后确保您拥有最新版本的 bundler:

      $ sudo gem update bundler
      

      最后重新安装

      $ bundle install
      

      它应该要求您输入密码才能将可执行文件安装到正确的位置。注意不要在此处使用sudo - 请参阅上面的链接了解详细信息。

      【讨论】:

      • 宏伟而全面的答案。你是对的,运行 ruby​​ -rubygems /Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin/heroku 对我有用。我刚刚学到了很多。我熟悉 RVM 并在工作中使用它,但我认为我只有一个环境,没有它我会活下去。下次我会用它。暂时我要么重新安装,要么通过 bundle exec 运行它(我不运行 that 很多 heroku 命令,因为它现在是一个问题)。
      【解决方案4】:

      尝试将其添加到 PATH 的末尾:

      /Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin
      

      如果这不起作用,请让 Spotlight 找到一个名为“heroku”的文件,并将适当的目录添加到您的 PATH。如果你有一些时间,并且想成为一个老派的 unix 小伙子:

      $ cd /
      $ ls -l $(find [A-Z]* -name heroku -not -type d -print)
      

      您也可以使用Cinderella 来设置您的 Ruby/PostgreSQL/MySQL/MongoDB/... 环境。这将为您提供所有内容的最新版本并明智地设置您的路径。我在让 Cinderella 前进时遇到了一些问题,但它一直是救命稻草,它把所有东西都放在 ~/Developer/ 中而不是把所有东西都分散在一个地方非常好。

      【讨论】:

      • 我将 /Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin 添加到我的路径中。这让我可以运行 heroku,但我得到了以下堆栈跟踪
      • @user656510:sarnold 关于RUBYLIB 的评论听起来不错。您应该能够编辑问题以添加堆栈跟踪,您的答案可能已被删除,因为它是问题更新而不是答案。
      猜你喜欢
      • 2012-09-29
      • 2021-07-18
      • 2015-05-12
      • 2018-06-14
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多