2012-08-16 18 views
50

कुछ अतुल्य कारणों से, रूबीमाइन आपके द्वारा किए गए हर परिवर्तन को स्वत: सहेजता है और इसलिए हर महत्वपूर्ण स्ट्रोक आपके परीक्षण चलाने के लिए गार्ड को ट्रिगर करेगा! और सबसे हास्यास्पद बात यह है कि स्पष्ट रूप से इस स्वत: सहेजने "सुविधा" को अक्षम करने का कोई तरीका नहीं है। मैं बस सोच रहा हूं, रूबीमाइन रेल डेवलपर्स के बीच एक बहुत ही लोकप्रिय संपादक प्रतीत होता है और गार्ड परीक्षण को स्वचालित करने के लिए उपयोग किया जाने वाला एक अनिवार्य उपकरण प्रतीत होता है। चूंकि रूबीमाइन के साथ तर्क का उपयोग करना असंभव है, रूबीमाइन के साथ लोगों को अपने परीक्षणों को स्वचालित करने के साथ कैसे व्यवहार किया जाता है?क्या रूबीमाइन के साथ गार्ड का उपयोग करना असंभव है?

+0

पर इस के लिए एक खुला मुद्दा है। – CrazyCoder

+1

यह "निष्पक्ष" कैसे है? –

+0

मैं व्यक्तिगत रूप से इसके बजाय कोई ऑटो सेव नहीं करता हूं। कभी-कभी, विशेष रूप से विम स्ट्रोक के साथ, आप किसी अन्य व्यक्ति पर स्विच करते समय गलती से वर्तमान फ़ाइल में अतिरिक्त वर्ण जोड़ सकते हैं और नोटिस नहीं कर सकते हैं। आम तौर पर परीक्षण इसे पकड़ते हैं लेकिन एक .js फ़ाइल में एक बार मैंने बहुत अंत में एक संलग्न "z" तैनात किया था और क्रॉस-ब्राउज़र परीक्षण करने तक इसे पकड़ नहीं लिया जिससे आईई ने इसे बार-बार किया। – Ted

उत्तर

144

मैं पूरे दिन गार्ड के साथ रूबीमाइन का उपयोग कर रहा हूं, और वास्तव में, गार्ड के कुछ हिस्सों को रूबीमाइन में ही विकसित किया गया है।

आप मेनू में RubyMine > Preferences पर जाकर ऑटो-सुरक्षित व्यवहार कॉन्फ़िगर कर सकते हैं और खोज बॉक्स में sync दर्ज करें, फिर सूची से System Settings चुनें।

Configure RubyMine auto safe behavior

चित्र अपनी सेटिंग्स और इन कार्यों ठीक पता चलता है। मैन्युअल रूप से एक फ़ाइल को सहेजने के लिए, आप Save files on frame deactivation को अक्षम भी कर सकते हैं।

मैं टर्मिनल से गार्ड का उपयोग करना पसंद है, लेकिन आप सीधे मेनू से Run > Edit configurations का चयन करके एक भागो विन्यास जोड़कर गार्ड को चलाने के लिए RubyMine कॉन्फ़िगर कर सकते हैं: इस पर क्लिक करके

अब आप एक नया विन्यास जोड़ सकते हैं धन चिह्न + और IRB console का चयन करें:

Add new run configuration

अब विन्यास Guard नाम, पथ आईआरबी स्क्रिप्ट में रक्षा करने के लिए दर्ज करें और सेट परियोजना कामकाजी निर्देशिका। आप अपने गार्ड तर्क, विभिन्न गार्ड समूहों की तरह, आदि

Configure the run configuration

मैं टर्मिनल खोलने के द्वारा की रक्षा के लिए अपना रास्ता मिल गया आईआरबी तर्कों के रूप में प्रवेश के लिए चाहते हो सकता है, इस परियोजना कार्यशील निर्देशिका में बदल गया है और which guard, में प्रवेश किया जो मेरे रूबी के लिए /Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard में परिणाम 1.9.3-पी 1 9 4 एसडीके आरवीएम द्वारा प्रबंधित किया गया।

अगला आपको टैब में बंडल के संदर्भ में स्क्रिप्ट चलाएं।

Run with bundle exec

अब OK दबाएँ और आप एक नया रन विन्यास है। गार्ड शुरू करने से पहले, आप अपने Guardfile को

interactor :simple 

जोड़कर सरल करने के लिए interactor कॉन्फ़िगर करना चाहिए। अब आप (या यहां तक ​​कि डिबग) चला सकते हैं गार्ड सीधे RubyMine भीतर:

Guard in Action

का आनंद लें!

+10

यह एक बेहद विस्तृत उत्तर है :) – grosser

+0

बढ़िया, धन्यवाद! किसी कारण से, रूबीमाइन में मेरी फाइलों को सहेजने से मेरे परीक्षणों को फिर से शुरू करने के लिए गार्ड ट्रिगर नहीं होता है। कोई विचार क्यों? – alecmce

+1

@alecmce आपको अपनी रूबी स्थापना में [उचित रीडलाइन समर्थन जोड़ना चाहिए] (https://github.com/guard/guard/wiki/Add-proper-Readline-support-to-Ruby-on-Mac-OS-X) । – Netzpirat

1

या आप निम्न कोड के साथ अपनी परियोजना की जड़ में एक run_guard.rb फ़ाइल जोड़ सकते हैं:

exec 'guard' 

से सावधान रहें!Rubymine आपके पाथ के साथ एक समस्या है। उदाहरण के लिए,/usr/local/bin फ़िल्टर किया गया है ...

4

जब आप परीक्षण के लिए रूबीमाइन के साथ गार्ड चलाते हैं, तो गार्ड स्पेक के लिए एक अलग डेटाबेस वातावरण को कॉन्फ़िगर करना बेहद उपयोगी होता है, अन्यथा आपको अजीब समस्याएं आती हैं (एक प्रक्रिया या अन्य फ्रीज़ या असंगत परिणाम देता है।

नाम अपने गार्ड कल्पना वातावरण "ci" और database.yml में एक अतिरिक्त प्रविष्टि बनाने के। मैं सतत स्वचालन के लिए "ci" का उपयोग करें।

तब में रखते आपकी गार्डफाइल। मुख्य बात

'RAILS_ENV' => 'ci' 

group :spec do 
    guard :spork, :rspec_port => 1234, :cucumber_env => { 'RAILS_ENV' => 'ci' }, :rspec_env => { 'RAILS_ENV' => 'ci' } do 
    watch('config/application.rb') 
    watch('config/environment.rb') 
    watch(%r{^config/environments/.+.rb$}) 
    watch(%r{^config/initializers/.+.rb$}) 
    watch('spec/spec_helper.rb') 
    watch(%r{app/models/.+\.rb}) 
    watch(%r{app/views/.+\.haml}) 
    watch('Gemfile') 
    watch('Gemfile.lock') 
    watch('test/test_helper.rb') 
    end 

    # environment is 'ci' 
    guard :rspec, :cli => '--drb --drb-port 1234', :version => 2, :all_after_pass => false, :notification => true, :environment => 'ci' do 
    watch(%r{^spec/.+_spec.rb$}) 
    watch(%r{^lib/(.+).rb$})  { |m| "spec/lib/#{m[1]}_spec.rb" } 
    watch('spec/spec_helper.rb') { "spec" } 
    # Rails example 
    watch(%r{^spec/.+_spec.rb$}) 
    watch(%r{^app/(.+).rb$})       { |m| "spec/#{m[1]}_spec.rb" } 
    watch(%r{^lib/(.+).rb$})       { |m| "spec/lib/#{m[1]}_spec.rb" } 
    watch(%r{^app/controllers/(.+)_(controller).rb$}) do |m| 
     ["spec/routing/#{m[1]}_routing_spec.rb", 
     "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", 
     "spec/acceptance/#{m[1]}_spec.rb", 
     "spec/requests/#{m[1]}_spec.rb"] 
    end 

    watch(%r{^spec/support/(.+).rb$})     { "spec" } 
    watch('config/routes.rb')       { "spec/routing" } 
    watch('app/controllers/application_controller.rb') { "spec/controllers" } 
    # Capybara request specs 
    watch(%r{^app/views/(.+)/.*.(erb|haml)$})   { |m| "spec/requests/#{m[1]}_spec.rb" } 
    end 
end 

मैं तो चलाने

bundle exec guard -g spec 

मैं भी RubyMine फ़ाइलें स्वचालित रूप से बचाने के लिए हर 60 सेकंड भले ही उस गार्ड की शुरूआत की, के रूप में मेरे लिए एक नया होने से परहेज नहीं करते:

यहाँ कैसे मैं मेरा सेटअप है गार्ड चलाने के दौरान एमबीपी रेटिना ध्यान से धीमा नहीं होता है।

बीटीडब्ल्यू, गार्ड चलने वाले चश्मा वास्तव में महान हैं क्योंकि आप रूबीमाइन में परीक्षण चलाने की कोशिश करने से अधिक तेज़ परीक्षणों को पा सकते हैं। यानी, परीक्षण मूल रूप से तब किया जाता है जब मेरी उंगली cmd-s से बचाने के लिए रिलीज़ होती है।

मैं इसे टर्मिनल से चलाता हूं। मैंने रुबीमाइन के साथ दौड़ने की कोशिश नहीं की है। कोई भी ऐसा करने के फायदों पर टिप्पणी करना चाहता है? मुझे लगता है कि स्टैक डंप क्लिक करने योग्य अच्छा होगा।

+0

मुझे 'पता \ */bin/guard' का उपयोग करना पसंद है क्योंकि यह आपके सिस्टम में बाइनरी गार्ड फ़ाइल के सभी इंस्टॉलेशन को प्रदर्शित करने का एक आसान तरीका है :) –

+0

मुझे नहीं पता कि क्यों, लेकिन इसने I/O का एक गुच्छा हल किया और मेरे लिए sqlite लॉकिंग अपवाद। –

2

यह वास्तव में निराशाजनक समस्या है, और रूबीमाइन को गार्ड या ग्रंट या अन्य टास्क-धावकों के साथ उपयोग करना बहुत मुश्किल बनाता है।

मैं एक पागल वैकल्पिक हल का एक सा बनाया है, लेकिन यह मेरे लिए काफी अच्छी तरह से काम कर रहा है:

  1. सम्मानित यूनिक्स "स्पर्श" कमांड है, जो एक फ़ाइल के संशोधित टाइमस्टैम्प अपडेट हो जाता है चलाने के लिए एक बाहरी उपकरण जोड़ें, इस प्रकार एक फाइल सिस्टम घटना उत्पन्न करना। यह इस तरह दिखना चाहिए: External Tool called touch
  2. बाहरी टूल को एक कीबोर्ड शॉर्टकट असाइन करें।
  3. सहेजें दस्तावेज़ कमांड के लिए एक कीबोर्ड शॉर्टकट असाइन करें।
  4. एक मैक्रो रिकॉर्ड करें जो दस्तावेज़ सहेजें, फिर "स्पर्श" बाहरी उपकरण चलाता है। आपको असाइन किए गए कीबोर्ड शॉर्टकट का उपयोग करने की आवश्यकता है क्योंकि दस्तावेज़ सहेजें एप्लिकेशन के मेनू में प्रकट नहीं होता है।
  5. अपने नए मैक्रो के लिए कीबोर्ड शॉर्टकट के रूप में सीएमडी-एस असाइन करें। http://youtrack.jetbrains.com/issue/RUBY-9903:

मेरे इस बारे में पूरी ब्लॉग पोस्ट http://singlebrook.com/blog/saving-files-in-rubymine

संबंधित मुद्दे