簡體   English   中英

從RubyMine到Mac命令行應用程序?

[英]From RubyMine to Mac command-line app?

我是一個相當有成就的開發人員,並且知道足夠的Ruby從幾個多態方向射擊我的腳。 老實說,我對Rails沒興趣,並且想要使用Ruby作為Mac命令行腳本替代php或Python。 我很難在哪里開始使用RubyMine。 我想將RubyMine用於它的所有功能,我使用JetBrains的AppCode和IntelliJ,因此RubyMine看起來很簡單。 但我是否僅限於編寫.rb文件並只是從終端命令行運行它們? 我希望能夠在不等待異常的情況下調試代碼。

所以,我想我要求的是一個簡單的清單,以獲得命令行應用程序。 哪個項目類型,我應該如何組織它,如何測試以及如何在RubyMine中運行? 提前致謝。 (我們曾經都是新手......)

TLDR; 只需編寫代碼,盡可能使用RubyMine,你會沒事的。 我在這里包含我自己的流程,但僅作為示例。

在Ruby中創建命令行工具

我使用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的Ruby

我遇到了很多Rails開發人員,他們並不知道什么 Rails,什么 ruby。 即你刪除Rails時剩下的東西。 顯然,服務器和模板化,數據庫化,MVC都已經消失了,添加到日常對象的一部分便利方法也是如此。

新的商品是你還有很多東西。 如果你發現你錯過了什么東西,很容易通過包含一兩顆寶石來重新添加它。 例如,如果您喜歡使用像活動記錄這樣的ORM,那么可以將其包含在您的應用程序中,無需使用軌道,只需輕輕一點。

require 'activerecord'

全功能RubyMine

最后,在開發過程中使用RubyMine功能更多。 使用rails時可用的所有內容都可用於命令行應用程序。

您可以從RM運行命令,並使用與rails相同的調試器。 就像任何IDE一樣,您可以使用要測試腳本的參數設置“運行”配置文件,並通過IDE運行或調試腳本。 就個人而言,我從不使用命令行調試器。 如果我需要啟動調試器來解決某些問題,那么我將在IDE中啟動該程序。 IDE調試器的好處是“抬頭”顯示所有相關細節,並通過執行直觀地跟蹤腳本,這是不可替代的。

工具欄manu轉到運行>>>編輯配置然后更新**工作目錄路徑**應用>>確定現在我可以批量運行所有測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM