2011-03-12 152 views
3

这似乎已经解决之前在How do I use gems with Ubuntu?以及其他答案,但没有任何解决方案似乎为我工作。heroku:命令未找到

我正在使用Mac OSX 10.6

我已经使用捆绑软件安装了heroku。下面显示了我的gem环境和我的路径 - 我已经尝试将可执行目录和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 

任何帮助非常感谢

+0

重新安装Heroku的列工具你能削减正粘贴命令_and output_什么,那就是失败的修正呢? :) – sarnold 2011-03-12 11:42:45

+0

好的。添加命令和输出 – Ian 2011-03-12 21:28:42

+0

'捆绑exec heroku'工作吗? – matt 2011-03-12 21:52:17

回答

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组中任何人写,/usr/bin不是。

这里似乎发生了什么是bundler在安装gem时未能将heroku可执行文件安装到/usr/bin,可能是因为此权限问题。 This blog post表明这是OSX早期版本的bundler问题。

ruby​​gems安装的可执行文件是而不是只是来自宝石bin目录(即/Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin)的heroku脚本的副本。相反,它是由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,并检查它是否正确安装。首先拆下与现有的宝石:

$ sudo gem uninstall heroku 

然后确保你有最新版本捆绑的:

$ sudo gem update bundler 

$ bundle install 

最后重新安装,它应该问你的密码将可执行文件安装到正确的位置。注意不要在这里使用sudo - 请参阅上面的链接了解详情。

+0

宏伟而全面的答案。你是对的,运行ruby -rubygems /Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin/heroku适合我。我学到了很多。我熟悉RVM并在工作中使用它,但认为我只有一个环境,我没有它就活着。下次我会用它。暂时我会重新安装或通过bundle exec运行它(我不会运行_that_许多heroku命令,因为它现在是一个问题)。 – Ian 2011-03-15 10:35:37

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/而不是散布在所有的地方。

+0

我将/Library/Ruby/Gems/1.8/gems/heroku-1.18.3/bin添加到我的路径中。这允许我运行heroku,但我得到了以下堆栈跟踪 – Ian 2011-03-13 09:11:40

+0

@ user656510:sarnold对'RUBYLIB'的评论听起来是对的。你应该可以编辑问题来添加堆栈跟踪,你的答案可能被删除,因为这是一个问题更新而不是答案。 – 2011-03-14 07:55:33