代码之家  ›  专栏  ›  技术社区  ›  mabe02

Overmit RailsSchemaUpdate在--运行时传递,但在提交时失败

  •  1
  • mabe02  · 技术社区  · 8 年前

    overcommit Rails 5.0.2 ruby 2.4.0 :

    $ overcommit --run
    Running pre-commit hooks
    Check if database schema is up to date..........[RailsSchemaUpToDate] OK
    Check YAML syntax........................................[YamlSyntax] OK
    Check Gemfile dependencies..............................[BundleCheck] OK
    Check for vulnerable versions of gems...................[BundleAudit] OK
    Analyze with RuboCop........................................[RuboCop] OK
    Analyze with haml-lint.....................................[HamlLint] OK
    
    ✓ All pre-commit hooks passed
    $ git ci -m "Overcommit and Linters added"
    Running pre-commit hooks
    Check if database schema is up to date..........[RailsSchemaUpToDate] FAILED
    It looks like you're adding a migration, but did not update the schema file
    Check YAML syntax........................................[YamlSyntax] OK
    Check Gemfile dependencies..............................[BundleCheck] OK
    Check for vulnerable versions of gems...................[BundleAudit] OK
    Analyze with RuboCop........................................[RuboCop] OK
    Analyze with haml-lint.....................................[HamlLint] OK
    
    ✗ One or more pre-commit hooks failed
    

    Gemfile :

    group :lint do
      gem 'overcommit', '~> 0.41', require: false  # hook event pre-commit, pre-push
      gem 'brakeman', '~> 3.7.2', require: false  # A static analysis security vulnerability scanner
      gem 'haml-lint', '~> 0.26', require: false  # Syntax checker for HAML
      gem 'ruby_css_lint', '~> 0.1', require: false  # Syntax checker for CSS
      gem 'rubocop', '~> 0.50', require: false  # A Ruby static code analyzer
      gem 'bundler-audit', '~> 0.6'  # Check dependencies
    end
    

    在我的 .overcommit.yml

    PreCommit:
      ALL:
        exclude:
          - 'bin/**'
          - 'public/**'
          - 'vendor/**'
      # ...
    
      # Migration Check
      RailsSchemaUpToDate:
        enabled: true
        on_warn: fail
    

    我的数据库文件夹结构是:

    +-- db
    | +-- seeds.rb
    | +-- migrate
      | +-- 20170922082256_devise_create_users.rb
      | +-- 20170922084050_create_fans.rb
    | +-- schema.rb
    

    db/schema.rb

    ActiveRecord::Schema.define(version: 20170922084050) do
    # ...
    end
    

    我试图降级到 ruby 2.3.1 但我仍然遇到同样的问题。

    2 回复  |  直到 7 年前
        1
  •  4
  •   mabe02    8 年前

    事实上我知道了。 overcommit --run

    我在那次提交中添加了所有过梁,我跑了 bundle exec rubocop --auto-correct 不包括 db/schema.rb .rubocop.yml

    这导致了 migration_files (以前编辑的移植文件)没有 schema_files (没有对 schema.rb

    if migration_files.any? && schema_files.none?
    

    发现了根据 source linked by Brian .

    $ OVERCOMMIT_DISABLED=1 git ci -m "Overcommit and Linters added"
    
        2
  •  1
  •   Brian    8 年前

    我相信区别在于 overcommit --run 是查看已经提交给master的内容,而预提交挂钩是查看您试图提交的内容。

    正在查看 the source ,此时会显示您收到的错误消息 if migration_files.any? && schema_files.none? 是真的。也就是说,下面有文件 db/migrate/ db/schema.rb 文件

    你能显示 git status ? 也许你的 文件被删除了?

    推荐文章