guard 'rspec', :version => 2, :cli => "--color --format nested" do
watch(%r{^spec/.+_spec\.rb})
watch(%r{^lib/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
end
group :development do
gem 'guard'
gem 'libnotify'
gem 'guard-rspec'
gem 'rb-readline'
end
рдЬрдм рдореИрдВ guard start
рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде libnotify рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЕрдЧрд▓реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЧрд╛рд░реНрдб рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
//home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/watcher.rb:80:in `initialize': No space left on device - Failed to watch "/home/blake/dev/my/project_child/.git/objects/78": The user limit on the total number of inotify watches was reached or the kernel failed to allocate a needed resource. (Errno::ENOSPC)
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:190:in `new'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:190:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:199:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:195:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `each'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:195:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `each'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:195:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `each'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard/listeners/linux.rb:58:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard/listener.rb:100:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard/listeners/linux.rb:20:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard.rb:203:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard/cli.rb:75:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor/task.rb:22:in `send'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/bin/guard:6
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/bin/guard:19:in `load'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/bin/guard:19home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/watcher.rb:80:in `initialize': No space left on device - Failed to watch "/home/blake/dev/my/project_child/.git/objects/78": The user limit on the total number of inotify watches was reached or the kernel failed to allocate a needed resource. (Errno::ENOSPC)
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:190:in `new'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:190:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:199:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:195:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `each'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:195:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `each'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:195:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `each'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/vendor/linux/lib/rb-inotify/notifier.rb:192:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard/listeners/linux.rb:58:in `watch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard/listener.rb:100:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard/listeners/linux.rb:20:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard.rb:203:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/lib/guard/cli.rb:75:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor/task.rb:22:in `send'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/gems/guard-1.0.0/bin/guard:6
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/bin/guard:19:in `load'
from /home/blake/.rvm/gems/ruby-1.8.7-p352@project/bin/guard:19
рдХреНрдпрд╛ рдпрд╣ рдЧрд┐рдЯ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?
рдпрд╣ рддрдм рдЖ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрдВ, рдЖрдк ignore_paths
рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкрде рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА README рдореЗрдВ )
рдореИрдВрдиреЗ ignore_paths '.git'
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рд╛ред
рдореБрдЭреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЗрд╡рд▓ 93 рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реА рд╣реИрдВ:
find . | grep -v '.git' | wc -l
93
рдпрд╣ рдЕрдЬреАрдм рд╣реИ, рд▓реЛрдЧреЛрдВ рдХреЛ lib рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдХреЗрд╡рд▓ FYI рдХрд░реЗрдВ, .git
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/guard/guard/blob/master/lib/guard/listener.rb#L19
рдХреЛрдИ рдЦрдмрд░?
рдирд╣реАрдВредрдЗрд╕реЗ рджреВрд╕рд░реА рдорд╢реАрди рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рд╣рдореНрдо .. рдореЗрд░реЗ рдХрд╛рдо рдкрд░, рджреВрд╕рд░реЗ рдкреАрд╕реА рдкрд░ рд╡рд╣реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдЪрд▓рддрд╛ рд╣реИ .. рджреЛрдиреЛрдВ рдкреАрд╕реА рдкрд░ рдореИрдВ рдбреЗрдмрд┐рдпрди рд╕реНрдХреНрд╡реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдореБрдЭреЗ рдПрдХ рдмрдбрд╝реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдирджреЗрдЦрд╛_рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдЕрдирджреЗрдЦрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреБрдЫ рдлрд╝рд╛рдЗрд▓ рдХреЛ 'рджреЗрдЦрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓' рдХрд┐рдпрд╛ рд╣реИред
рдкрдереЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЧрд╛рд░реНрдб рд╕реНрддрд░ рдкрд░ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди rb-inotify
рд╕рд╛рде рдирд╣реАрдВ, ignore_paths
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ rb-inotify
рдореЗрдВ рдПрдХ рдЕрдирджреЗрдЦрд╛_рдкрде рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред @ nex3 рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд inotify рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкрдереЛрдВ рдХреЛ рдЪреБрдирд┐рдВрджрд╛ рд░реВрдк рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреНрд░реА рд╕реЗ рдореЙрдиреНрд╕реНрдЯрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛ред рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВрдиреЗ .git
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреБрдЫ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ :)
inotify рдХреЗ рд▓рд┐рдП max_user_watches рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 8192 рдкрд░ рд╕реЗрдЯ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ 100k рддрдХ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЪреАрдЬреЗрдВ рдареАрдХ рд╣реИрдВред
cat /proc/sys/fs/inotify/max_user_watches
echo 100000|sudo tee /proc/sys/fs/inotify/max_user_watches
рдмреВрдЯ рдкрд░ max_user_watches рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, /etc/sysctl.conf рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ fs.inotify.max_user_watches=100000 рдЬреЛрдбрд╝реЗрдВ рдпрд╛ fs.inotify.max_user_watches= рдХреЛ 100000 рдореЗрдВ рдареАрдХ рдХрд░реЗрдВред
рдореБрдЭреЗ рдзрдиреНрдпрд╡рд╛рдж рдордд рджреЛ, рдЗрд╕ рдЖрджрдореА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж -> http://blog.sorah.jp/2012/01/24/inotify-limitation
@jhirn рдЕрдЪреНрдЫрд╛ рд▓рд┐рдВрдХ, рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! /рд╕реАрд╕реА @ рдорд╛рд╣реЗрд░4рдПрд╡рд░
@thibaudgg рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ (рд╡рд┐рдХреА рдкреЗрдЬ?) рдпрд╛ рд╕реБрдиреЛ рд░реЗрдкреЛ рдкрд░ рдХреБрдЫ рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рдПрдВред рдХреНрдпрд╛ рд╣рдо рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рд╡рд┐рдХреА рдкреЗрдЬ рдЬреЛрдбрд╝реЗрдВрдЧреЗ? :)
рдЗрд╕реЗ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди github.com/sorah рдХреЛ рдХреНрд░реЗрдбрд┐рдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВред =)
@Maher4Ever рд╣рд╛рдБ +1 рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рд╕реБрдиреЛ рд╡рд┐рдХреА рдкреЗрдЬ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП!
@ рдЭрд┐рд░рди , рдЕрдЪреНрдЫреА рдЦреЛрдЬ!
@thibaudgg , рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
inotify рдХреЗ рд▓рд┐рдП max_user_watches рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 8192 рдкрд░ рд╕реЗрдЯ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ 100k рддрдХ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЪреАрдЬреЗрдВ рдареАрдХ рд╣реИрдВред
рдмреВрдЯ рдкрд░ max_user_watches рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, /etc/sysctl.conf рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ fs.inotify.max_user_watches=100000 рдЬреЛрдбрд╝реЗрдВ рдпрд╛ fs.inotify.max_user_watches= рдХреЛ 100000 рдореЗрдВ рдареАрдХ рдХрд░реЗрдВред
рдореБрдЭреЗ рдзрдиреНрдпрд╡рд╛рдж рдордд рджреЛ, рдЗрд╕ рдЖрджрдореА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж -> http://blog.sorah.jp/2012/01/24/inotify-limitation