По някаква необяснима причина RubyMine автоматично запазва всяка промяна, която правите и така всяко натискане на клавиш ще задейства Guard да изпълни вашите тестове! И най-смешното е, че очевидно няма начин да деактивирате тази функция за автоматично запазване. Просто се чудя, RubyMine изглежда е много популярен редактор сред разработчиците на Rails, а Guard изглежда е незаменим инструмент, използван за автоматизиране на тестването. Тъй като Guard е невъзможно да се използва разумно с RubyMine, как хората се справят с автоматизирането на своите тестове с RubyMine?
Невъзможно ли е да използвате Guard с RubyMine?
Отговори (5)
Използвам RubyMine с Guard цял ден и всъщност някои части на Guard са разработени в самия RubyMine.
Можете да конфигурирате автоматичното безопасно поведение, като отидете на RubyMine > Preferences
в менюто и въведете sync
в полето за търсене, след което изберете System Settings
от списъка.
Картината показва моите настройки и те работят добре. Може също да искате да деактивирате Save files on frame deactivation
, за да запазите файл само при ръчно записване.
Предпочитам да използвам Guard от терминала, но можете да конфигурирате RubyMine да стартира Guard директно, като добавите Изпълни конфигурация, като изберете Run > Edit configurations
от менюто:
Сега можете да добавите нова конфигурация, като щракнете върху знака плюс +
и изберете IRB console
:
Сега наименувайте конфигурацията Guard
, въведете пътя до Guard в IRB скрипта и задайте работната директория на проекта. Може да искате да въведете вашите Guard аргументи като IRB аргументи, като различни Guard групи и т.н.
Намерих моя път към Guard, като отворих терминала, промених в работната директория на проекта и въведох which guard
, което води до /Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard
за моя Ruby 1.9.3-p194 SDK, управляван от RVM.
След това трябва да поставите отметка до Изпълни скрипта в контекста на пакета в раздела Bundler
.
Сега натиснете OK
и имате чисто нова конфигурация за изпълнение. Преди да стартирате Guard, трябва да конфигурирате интерактора на прост чрез добавяне
interactor :simple
на вашия Guardfile
. Сега можете да стартирате (или дори да отстраните грешки) Guard директно в RubyMine:
Наслади се!
Опитайте да използвате следното:
String str = "This is a simple sentence";
String[] strgs = str.split(" ");
Това ще създаде подниз на всеки индекс на масива от низове, използвайки интервала като точка на разделяне.
- person max; 12.11.2013which guard
ще върне пътя за shim/wrap/alias, който RBEnv използва, трябва да прегледате папката си с скъпоценни камъни, за да намерите правилния скрипт за защита, който е действително ruby код. В моя случай скриптът (ruby) guard беше в: ~/.rbenv/versions/<some_ruby_version>/lib/ruby/gems/1.9.1/gems/guard-1.0.3/bin/guard
- person damianmr; 06.01.2015
rbenv which guard
, за да получите специфичния за rbenv път за защита.
- person aks; 16.10.2016
Когато стартирате guard с RubyMine за тестове, е изключително полезно да конфигурирате отделна среда на база данни за спецификация на guard, в противен случай ще изпитате странни проблеми (един или друг процес замръзва или дава противоречиви резултати.
Наименувайте вашата защитна спецификационна среда "ci" и създайте допълнителен запис в database.yml. Използвам "ci" за непрекъсната автоматизация.
След това поставете това във вашия Guardfile. Ключовото е
'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 секунди, дори ако това стартира Guard, тъй като моята нова MBP Retina не се забавя забележимо при стартиране на Guard.
Между другото, спецификациите за изпълнение на Guard са наистина страхотни, тъй като ще намерите неуспешни тестове много по-бързо, отколкото да се опитвате сами да стартирате тестовете в RubyMine. Т.е., тестът основно е завършен до момента, в който пръстът ми се освободи от cmd-s, за да запази.
Пускам това от терминала. Не съм опитвал да стартирам с RubyMine. Някой иска ли да коментира предимствата на това? Предполагам, че би било хубаво да има възможност за щракване върху изхвърлянето на стека.
locate \*/bin/guard
, тъй като това е лесен начин за показване на всички инсталации на двоичния защитен файл във вашата система :)
- person Steve Benner; 18.11.2013
Това е наистина разочароващ проблем и прави много трудно използването на RubyMine с guard или grunt или други задачи.
Създадох малко лудо решение, но работи достатъчно добре за мен:
- Добавете външен инструмент, за да изпълните почтената команда Unix "touch", която актуализира модифицирания времеви печат на файл, като по този начин генерира събитие на файловата система. Трябва да изглежда така:
- Задайте на външния инструмент клавишна комбинация.
- Задайте клавишна комбинация на командата Записване на документ.
- Запишете макрос, който изпълнява Save Document, след това външния инструмент "touch". Трябва да използвате клавишните комбинации, които сте задали, защото Save Document не се показва в менютата на приложението.
- Задайте Cmd-S като клавишна комбинация за вашия нов макрос.
Пълната ми публикация в блога за това е на http://singlebrook.com/blog/saving-files-in-rubymine
Или можете да добавите run_guard.rb файл в основата на вашия проект със следния код:
exec 'guard'
Внимавай! Rubymine има проблем с вашия PATH. Например /usr/local/bin се филтрира ...