[英]From RubyMine to Mac command-line app?
我是一個相當有成就的開發人員,並且知道足夠的Ruby從幾個多態方向射擊我的腳。 老實說,我對Rails沒興趣,並且想要使用Ruby作為Mac命令行腳本替代php或Python。 我很難在哪里開始使用RubyMine。 我想將RubyMine用於它的所有功能,我使用JetBrains的AppCode和IntelliJ,因此RubyMine看起來很簡單。 但我是否僅限於編寫.rb文件並只是從終端命令行運行它們? 我希望能夠在不等待異常的情況下調試代碼。
所以,我想我要求的是一個簡單的清單,以獲得命令行應用程序。 哪個項目類型,我應該如何組織它,如何測試以及如何在RubyMine中運行? 提前致謝。 (我們曾經都是新手......)
TLDR; 只需編寫代碼,盡可能使用RubyMine,你會沒事的。 我在這里包含我自己的流程,但僅作為示例。
我使用RubyMine而不做任何導軌並按照你的要求做。 我編寫了很多簡單的腳本和大型應用程序,它們通常都可以從命令行使用。
我仍然將我的代碼組織到一個“項目目錄”中。 並將RM指向該目錄。 而不是僅僅完全在一個文件中工作,並試圖單獨指向RM文件。 這似乎是IDE的首選。 這使RM可以創建其.idea
目錄來保存其所有與項目相關的設置。
這可能意味着某些項目只包含一個目錄(對於項目)和該目錄中的單個文件(單個腳本實際上是該項目中的唯一內容)。
您很快就會發現無論如何都要向任何項目添加更多文件。 附加編碼和各種實用程序都是ruby的巨大優勢的一部分。
project directory
模式,也允許您使用流行的VCS(如git)對代碼進行版本控制,甚至可以上傳到github等社交編碼站點。
我不打擾任何“項目類型”。 實際上我根本不用RubyMine創建項目。 我只是創建一個目錄,然后用RM打開該目錄(無論是從文件菜單,還是通過RM安裝的“我的”命令行工具)。
project/
當然project
不是project
的真實名稱,也不是我創建的目錄,我只是在這里使用它作為通用名稱。 我實際上會在腳本或他們所做工作的主題之后命名目錄(和項目)。
注意: 目前RM 5中的mine
命令中存在一個錯誤,它不會打開第二個項目窗口。
顯然,如果這是一個包含任何命令行腳本的項目,我會將它們放在bin
目錄中,僅用於組織目的。 我不喜歡用各種各樣的東西搞亂根項目目錄。 有太多的工具需要在項目根目錄中設置文件,因此越少越好。
project/bin/
就像我說的,各種其他實用程序更喜歡項目根目錄中的設置文件,因此您可能會發現自己正在使用它們中的一些。
project/Gemfile
project/Rakefile
project/project.gemspec
project/README.md
project/.rdoc_options
...
一旦我對腳本進行了一些自動化測試(我承認不是立竿見影的)我將所有測試代碼放在test
目錄下,但我會根據測試范圍進行進一步分類,或者在測試期間運行它們的頻率如何。發展。 我甚至會添加quck Rake任務,這些任務只是運行測試所需命令的別名。 所以我不必記住哪個測試運行器,或者每次都輸入完整的路徑。
project/test/
project/test/unit/
project/test/unit/some_component_test.rb
project/test/integration/
最后,隨着項目的增長,我添加了更多腳本或想要重用外部項目中的一些代碼,我將添加一個lib
目錄,並使用一些標准實踐來組織它。
project/lib/
project/lib/project.rb
隨着項目的不斷發展和變得越來越復雜,經過一些重構后,需要對內容進行更多的組織。 請注意cmd
目錄包含特定腳本可以通過的各種工作流的實際頂級代碼。
project/lib/project/
project/lib/project/other_stuff.rb
project/lib/project/cmd/
project/lib/project/cmd/one_command.rb
project/lib/project/cmd/another_command.rb
當然原始的project.rb
'需要'所有這些lib文件。 Ruby加載速度非常快,因此我不會在管理同一項目中的ruby文件之間的依賴關系時煩惱太多。 它真正涉及代碼可讀性。
從單個腳本文件開始並編寫最小的樣板編碼沒有任何問題。 這可能是最好的開始方式。
#!/usr/bin/env ruby
=begin
this is a script blah which does whatever
EXAMPLE
$ script <options> <arguments
=end
def main(args)
whatever
end
main(ARGV)
exit(0)
但是在ruby中編寫更好的命令行應用程序非常容易。 有一些流行的寶石可以為您處理大量的基礎設施。
您可以從像OptionParser這樣簡單的事情開始
然后,當您在腳本中構建更多代碼時,您可以使用像Methadone這樣的寶石來升級更多基礎架構
最后,當您編寫完整的命令行應用程序時,使用許多“內部”命令,如“git submodule init”,您可以提升到像GLI這樣更重量級的東西
無論您的寫作類型是什么類型,單元測試都幾乎相同。 您不是使用真實服務或組合組件,而只是隔離內部組件並以純粹的內部方式使用它們。 因此命令行工具沒有太多變化。
但是當涉及到我的腳本的集成或完整的命令行測試時,我實際上是cucumber/aruba
忠實粉絲。 我對TDD並不陌生,我對此有點過於務實。 但是對於命令行工具,一系列用例已經在可用的選項集中明確地列出。 即使對於交互式命令,這也使得一系列feature
文件可以方便地作為該工具的文檔使用。
Feature:
Create and manipulate notes in Evernote.
Background:
Given I am logged in as me
And I have 0 notes
Scenario: Show note
Given that I have 1 note named "foo" with content "bar"
When I run `rnote show note --title "foo"`
Then the output should contain "bar"
Scenario: Show note, from multiple notes
Given that I have 2 notes named "foo"
When I run `rnote show note --title "foo"` interactively
And I type "1"
Then the output should contain "foo"
至於腳本的安裝和打包,以便它們可以被世界其他地方共享和重用,只需使用相同的'gem'實用程序,你已經在ruby中一直使用它來實現依賴性。
您在編寫要共享的新gem時創建的gemspec
可以告訴您腳本和其他命令行實用程序。 然后它會用其余代碼將它們包裝起來,安裝在一個好位置,甚至修復PATH,以便用戶可以在時機到來時找到它們。
實際上這很好用,你的gem只能由這些bin
腳本組成。 沒有包含其他可重用的代碼。
貓狗是一種無害的小寶石,我把它作為其他東西的一個例子。 它根本不包含lib目錄,除了單個命令行腳本之外沒有其他ruby。
我遇到了很多Rails開發人員,他們並不知道什么是 Rails,什么是 ruby。 即你刪除Rails時剩下的東西。 顯然,服務器和模板化,數據庫化,MVC都已經消失了,添加到日常對象的一部分便利方法也是如此。
新的商品是你還有很多東西。 如果你發現你錯過了什么東西,很容易通過包含一兩顆寶石來重新添加它。 例如,如果您喜歡使用像活動記錄這樣的ORM,那么可以將其包含在您的應用程序中,無需使用軌道,只需輕輕一點。
require 'activerecord'
最后,在開發過程中使用RubyMine功能更多。 使用rails時可用的所有內容都可用於命令行應用程序。
您可以從RM運行命令,並使用與rails相同的調試器。 就像任何IDE一樣,您可以使用要測試腳本的參數設置“運行”配置文件,並通過IDE運行或調試腳本。 就個人而言,我從不使用命令行調試器。 如果我需要啟動調試器來解決某些問題,那么我將在IDE中啟動該程序。 IDE調試器的好處是“抬頭”顯示所有相關細節,並通過執行直觀地跟蹤腳本,這是不可替代的。
工具欄manu轉到運行>>>編輯配置然后更新**工作目錄路徑**應用>>確定現在我可以批量運行所有測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.