2011-03-12 148 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