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

Nic*_*nto 2 heroku ruby-on-rails-3

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

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

  1. 只有在测试通过时才进行测试和部署
  2. 在部署之前检查所有.rb文件中的binding.pry,如果发现有任何警告但未部署
  3. 有一个帮助包装binding.pry,如果它的生产环境有noop

显然,第一种选择是最好的.我该如何创建第二个选项?使用Rake或Shell或Capistrano?

Uni*_*key 5

如果你使用Git作为源代码控制,你应该编写一个预提交钩子.您可以使用您喜欢的任何语言,只要它是可执行的.

这是我用的一个.我不记得我找到它的确切位置.(编辑:看起来可能来自这里)

它被命名 <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?
Run Code Online (Sandbox Code Playgroud)

  • 对于使用此作为新文件的任何人,不要忘记chmod u + x以便它可执行,除非您正在编辑示例文件 (2认同)