2014-09-04 59 views
3

有人可以解釋以下命令之間的區別嗎?耙子和箱子/耙子之間的區別

rake assets:precompile

bin/rake assets:precompile

RAILS_ENV=production rake assets:precompile

RAILS_ENV=production bin/rake assets:precompile

+3

明確運行bin中的rake。一個沒有。其中兩個將環境設置爲生產,另外兩個不(例如,使用默認值,開發)。 – 2014-09-04 14:36:12

+0

「以二進制運行rake」是什麼意思? – ahnbizcad 2014-09-04 14:49:24

+3

什麼都沒有;我說「在垃圾桶裏運行耙子」。 'bin'是(假定是)當前目錄中的一個子目錄。對'bin/rake'的調用顯式運行'bin'目錄中包含的rake命令。調用'rake'可以在任何地方或任何地方運行rake命令。 – 2014-09-04 14:55:11

回答

2
  • rakebin/rake

Rake是您在計算機上安裝的程序。要在終端中使用它,請使用rake do:something。使用直接rake意味着已創建一個快捷方式,別名是「當我輸入rake我想要使用位於[...]中的程序」。

bin/rake樣式不使用創建的別名,而是使用程序的路徑。通常程序的執行者(不是程序的內容,只是啓動程序)位於文件夾/bin/。要確定一個特定的程序的完整路徑,使用which

[yoshiji:~] $ which rake 
/home/yoshiji/.rvm/gems/[email protected]/bin/rake 
[yoshiji:~] $ which ls 
/bin/ls 
  • RAILS_ENV=production rake do:something

RAILS_ENV部分是在這裏指定一個環境中運行的rake命令時的Rails應加載。默認情況下,環境爲development


總結:

  • rake assets:precompile:使用別名/快捷方式rake
  • /bin/rake assets:precompile:使用完整路徑rake程序
  • RAILS_ENV=production rake assets:precompile:指定Rails的加載production執行rake任務時的環境assets:precompile
+0

所以'rake'和'bin/rake'表現完全一樣嗎?唯一的區別是明確性水平? – ahnbizcad 2014-09-04 16:21:18

+1

除非你已經定義了一個快捷方式'rake'來執行其他啓動位於'bin/rake'的程序,否則它們的行爲是一樣的。唯一的區別是一個使用快捷鍵,而另一個使用完整路徑。 – MrYoshiji 2014-09-04 16:22:55

+0

如果你解釋哪裏可以找到別名,這將是很好的。我在.bash_profile和.bashrc中都沒有。我錯過了什麼? – karlihnos 2016-03-16 07:57:16

4

rakebin/rake都是可執行的Ruby文件,用於引導Rake gem。 rake是您的環境對Rake gem的默認調用,並且在安裝Rake時由RubyGems創建。它應該有地方住在PATH:

[jkrause:~] $ which rake 
/usr/bin/rake 

或者,如果您使用的版本管理,如RVM(你應該是):

[jkrause:~] $ which rake 
/Users/jkrause/.rvm/rubies/ruby-2.2.0/bin/rake 

bin/rake,而另一方面,由創建Rails在創建一個新的Rails應用程序,住位於你的Rails應用程序的根目錄bin裏面:

[jkrause:~] $ ls -la ~/src/my_rails_app/bin/rake 
-rwxr-xr-x 1 jkrause staff 164 Jan 5 14:11 bin/rake 

在老版本的鐵軌(3.x和老呃),bin/rake不存在,所以標準做法是調用RubyGems安裝的默認rake。使用Rails 4.x,您需要調用bin/rake,因爲Rails需要在Rake調用之前更改環境並加載一些輔助的寶石。誠實地說,我仍然不時地執行rake,並且我從來沒有看到過任何突破,但是自從Rails指南明確表明,開始使用bin/rake可能是個好主意。

最後,RAILS_ENV用於設置rakebin/rake的特定執行應使用的Rails環境(開發,測試或生產)。