heroku:命令未找到

时间:2011-03-12 11:37:12

标签: ruby macos heroku gem

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

我正在使用Mac OSX 10.6

我已经使用bundler安装了heroku。下面显示了我的宝石环境和我的路径 - 我尝试将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

任何帮助非常感谢

4 个答案:

答案 0 :(得分:3)

默认情况下,mac上的rubygems将可执行文件安装到/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时,bundler无法将heroku可执行文件安装到/usr/bin,可能是因为此权限问题。 This blog post表明这是OSX上早期版本的bundler的一个问题。

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

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

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

运行脚本但首先加载rubygems。这应该(可能 - 我不确定)工作。

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

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

我还建议您不要在$RUBYLIB变量中添加任何内容。这样做实际上可能会让heroku命令正常工作,但使用rubygems和bundler的重点是他们为你管理这样的东西。

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

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

$ sudo gem uninstall heroku

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

$ sudo gem update bundler

最后重新安装

$ bundle install

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

答案 1 :(得分:1)

尝试将此添加到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 / ...环境。这将为您提供最新版本的一切,并明智地设置您的路径。我有一些问题让灰姑娘继续前进,但它是一个救星,它是如何把所有东西都放在~/Developer/而不是把所有东西分散到各处的。

答案 2 :(得分:0)

通过从http://toolbelt.heroku.com

重新安装Heroku Toolbelt来解决此问题

答案 3 :(得分:0)

卸载,然后使用下面的sudo中的命令重新安装。我正在使用macOS 10.14。

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

我最初是用自制软件安装的,但是总是出现命令notfund错误。原因可能是curl安装使得可以在官方文档中提到的两个目录中进行设置。

  

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