我正在使用pry在Rails应用程序中使用断点,但是随着代码变得更加混乱,我有时会忘记从我刚调试的代码中删除binding.pry以进行热修复。
在我看来,我有三种选择来处理这个问题:
.rb
个文件中的binding.pry,如果发现有任何警告并且没有部署binding.pry
,如果它的生产环境有noop 显然第一种选择是最好的。我该如何创建第二个选项?使用Rake或Shell或Capistrano?
答案 0 :(得分:5)
如果您使用Git作为源代码控制,则应编写预提交挂钩。 您可以使用您喜欢的任何语言,只要它是可执行的。
这是我使用的。我不记得我找到它的确切位置。 (编辑:看起来可能来自here)
名为<your project>/.git/hooks/pre-commit
#!/usr/bin/env ruby
hits = []
checks = {
#'_spec\.rb$' => ['focus:[:space:]*true'],
'\.rb$' => ['binding\.pry', 'debugger'],
'\.coffee' => ['console\.log'],
'\.js' => ['console\.log']
}
# Find the names of all the filenames that have been (A)dded (C)opied or (M)odified
filenames = `git diff --cached --name-only --diff-filter=ACM`.split("\n")
filenames.each do |filename|
# Perform special checks for _spec filenames (rspec tests)
checks.each do |filename_pattern, patterns|
if filename.match filename_pattern
patterns.each do |contents_pattern|
results = `git diff --cached #{filename} | grep "^\+[^+]" | grep "#{contents_pattern}"`.split("\n").map { |r| r.sub(/^\+[\s\t]*/, '') }
if $? == 0
# Add the relevant change with line number to the hits array
results.each{ |r|
hits.push "#{filename}:" + `grep -n '#{r}' #{filename}`.sub(/:\s+/, ' ').chomp
}
end
end
end
end
end
if hits.any?
puts "\e[33m>>> Please remove the following problems from these files before committing\e[0m"
puts hits.join("\n")
end
exit 1 if hits.any?