在軌道上使用ruby時,通常使用終端命令,如rake db:migrate
或rails g devise:install
。但是這些命令中的:
究竟意味着什麼?在rake db:migrate
是migrate
一個參數或別的東西?這似乎不是一個很難的問題,但經過幾個小時對Google的研究並沒有找到答案,我真的很想有人向我解釋這一點。Ruby on Rails:冒號在終端上
回答
像菲利普在他的回答說明使用時耙結腸定義命名空間/任務之間的分隔符
當使用rails g(enerate)
這是基本相同。區別在於Rails生成器不是用rake的DSL定義的,而是它們的類。
但是要回答你最初的問題:在這兩種情況下,Colon都是作爲分隔符來工作的,就是這樣。
在代碼什麼它被分裂了繩子是唯一重要的事情: https://github.com/rails/rails/blob/4-0-stable/railties/lib/rails/generators.rb#L124
您可以找到有關發電機和如何創建一個的人更多的相關信息(這definetley將幫助你瞭解力學背後)在官方Ruby on Rails Guides
//編輯 好吧,讓我們來仔細看看發電機查找過程:
它接收的CLI和分裂的它通過了命名空間(使用冒號)
names = namespace.to_s.split(':')
那麼它獲得通過將通過命名空間(實際的發電機名稱)的最後一部分是在根據類和剩餘部分用冒號加入試(命名空間路徑,在我們的情況下,它色器件)至Rails::Generators::Base.find_by_namespace
if klass = find_by_namespace(names.pop, names.any? && names.join(':'))
再此方法將加入基地(命名空間路徑)和名稱(發電機名),並把它推到一個數組:
lookups = []
lookups << "#{base}:#{name}" if base
之後,它調用Rails::Generators.lookup
這將查找的類調用被叫發電機:
lookup(lookups)
這將再次會調用Rails::Generators.namepaces_to_paths
有該方法沒有什麼大的魔力,它在我們的例子中,這兩個是「devise/install/install」和「devise/install」,我們只需爲被調用的生成器返回一個包含兩個可能源路徑的數組。
因此,這些不是軌道將檢查的實際路徑,它們只是它的依賴於名稱空間的部分:generator構造。
的lookup
方法,現在就這兩個,我們姑且稱之爲子路徑,並檢查文件,要求在下列地點:
- 軌/發電機/設計/安裝/ install_generator
- 發電機/設計/安裝/ install_generator
- 軌/發電機/設計/ install_generator
- 發電機/設計/ install_generator
在我們的案例中,第二個路徑是所需的文件,rails需要它,並且由於Devise::Generators::InstallGenerator
繼承自Devise::Generators::InstallGenerator
,因此Rails::Generators::Base
上的inherited
(more about that callback)回調將被調用。
這將類添加到subclasses
陣列的Rails::Generators
,其被映射到散列,這將具有格式{命名空間=>克拉斯}等軌道最終能夠得到所期望的發電機級
並啓動它
這有很大的幫助。但是我仍然對它在生成情況下的工作方式感到困惑。實際上,我已經閱讀過多次提到的rails導航指南,但我仍然不明白它是如何適用於我向Phillip展示的設計代碼的。任何幫助將不勝感激。 –
非常感謝,這絕對解決了我的問題! –
您可以將冒號視爲命名空間。某處Rails內部有一個rake任務文件,看起來與此類似:
namespace db
task :migrate do...
....
end
end
這是一種方式將相關的任務一起,防止它們與其他任務的碰撞。這樣,你可能有色器件:遷移,分貝:遷移,foobar的:遷移等
所以foo:bar表示命名空間foo,任務:bar? –
是的。請記住,您也可以嵌套命名空間。耙a:b:c:d是完全有效的。 –
至於'rails g設計:安裝',我還是有點困惑。 'rails g devise [model_name]'運行生成器http://bit.ly/15bN3nt,但是'rails g devise:install'運行這個另外一個http://bit.ly/1alZ8gM,即使沒有定義任何任務那裏。對不起,打擾你更多。 –
- 1. Rails終端停止在Cloud 9 IDE(Ruby on Rails教程)上處理Ruby代碼
- 2. 「:」 符號在Ruby on Rails的
- 3. Ruby on Rails和Netezza後端
- 4. 前端挑戰Ruby on Rails
- 5. Ruby on Rails SPARQL客戶端
- 6. Ruby on Rails SQLite3表ID號
- 7. 在Ruby on Rails上捲曲
- 8. 在iPhone上的Ruby on rails
- 9. Ruby on Rails:從終端插入數據庫
- 10. OSX惡意終端命令(冒號,括號,大括號,apersand等)
- 11. CMS on Ruby on Rails
- 12. Ruby On Rails上的MySQL Gem
- 13. Ruby on rails文件上傳
- 14. Ruby on Rails上刮屏
- 15. Azure上的Ruby on Rails
- 16. IIS7上的Ruby on Rails
- 17. Ruby on Rails上的JSON api
- 18. Fedora 20上的Ruby on Rails
- 19. phusion passenger上的Ruby on Rails
- 20. IIS上的Ruby on Rails?
- 21. Ruby on Rails - 圖片上傳
- 22. Ruby on Rails上的mail_room
- 23. 上傳圖片Ruby on Rails
- 24. 在終端上運行ruby的Ubuntu終端快捷方式?
- 25. 在Ruby on Rails的
- 26. 在Ruby on Rails的
- 27. 在Ruby on Rails的
- 28. Ruby和Rails或Ruby on Rails
- 29. Ruby與Ruby On Rails
- 30. Ruby on Rails fullcalendar-rails
看起來Rake文件裏面,你會看到組織到命名空間和任務耙任務。 –