如何在部署之前检查断点?

时间:2014-06-17 12:45:33

标签: ruby-on-rails-3 heroku

我正在使用pry在Rails应用程序中使用断点,但是随着代码变得更加混乱,我有时会忘记从我刚调试的代码中删除binding.pry以进行热修复。

在我看来,我有三种选择来处理这个问题:

  1. 仅在测试通过时进行测试和部署
  2. 在部署之前检查所有.rb个文件中的binding.pry,如果发现有任何警告并且没有部署
  3. 有一个帮手来包裹binding.pry,如果它的生产环境有noop
  4. 显然第一种选择是最好的。我该如何创建第二个选项?使用Rake或Shell或Capistrano?

1 个答案:

答案 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?