【问题标题】:rake db tasks running twicerake db 任务运行两次
【发布时间】:2017-02-16 00:36:22
【问题描述】:

当我发现种子文件有问题时,我正在使用 Faker 的几千条记录为开发 postgres 数据库播种。我中止了种子操作并回滚了插入并修复了seeds.rb 文件。

当我再次运行它时,每个rake db:* 任务都会运行两次。我可以运行 rake routes 就好了,但如果我运行 rake db:drop 我会得到这样的结果:

$ rake db:drop
Dropped database 'vp_development'
Dropped database 'vp_development'

如果我尝试运行 migrate,当它尝试应用索引时,整个事情都会爆炸,因为它已经创建了这些列。

我只有一个默认的 Rakefile,在 lib 或其他任何地方都没有自定义 rake 文件。

环境是 rails 5.0.0.1 和 ruby​​ 2.2.2,如果这有什么不同的话。我现在很迷茫。

这是我的 Rakefile

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require_relative 'config/application'

Rails.application.load_tas

我看到其他帖子暗示这可能是 gem 的问题,但是当这个问题开始时,我已经有几天没有添加新的 gem。无论如何,这是 gemfile。

source 'https://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
gem 'puma', '~> 3.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'jquery-rails'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'devise'
gem 'bootstrap-sass', '3.3.6'
gem 'pg'
gem 'friendly_id'
gem 'will_paginate'
gem 'faker'

group :development, :test do
  #gem 'sqlite3'
  gem 'byebug', platform: :mri
end

group :development do
  gem 'web-console'
  gem 'listen', '~> 3.0.5'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :production do
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

编辑:我还在 db 命名空间中尝试了一个自定义任务,它工作正常。只运行一次。据我所知,db:drop、db:create、db:reset、db:migrate 是唯一运行两次的任务。这是db:dropdb:create 上的跟踪。

 $ rake db:drop --trace
** Invoke db:drop (first_time)
** Invoke db:load_config (first_time)
** Execute db:load_config
** Invoke db:check_protected_environments (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config 
** Execute db:check_protected_environments
** Execute db:drop
** Invoke db:drop:_unsafe (first_time)
** Invoke db:load_config 
** Execute db:drop:_unsafe
Dropped database 'vp_development'
Dropped database 'vp_development'

rake db:create --trace
** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:create
Created database 'vp_development'
Database 'vp_development' already exists

【问题讨论】:

  • 我实际上已经经历过那个,但我尝试从 Rakefile 运行他们的自定义任务,它运行良好。只是一次运行,所以它不可能和他们的原因相同。 $ rake foo:bar RUNNING STILL RUNNING $ rake db:bar RUNNING STILL RUNNING

标签: ruby-on-rails postgresql rake rakefile


【解决方案1】:

我找到了罪魁祸首。在最近几次 git 提交中的某个地方,我的 database.yml 不知何故被复制了。

每次我尝试运行任何引用环境的 rake 命令时,它都会运行两次。这么奇怪的问题。很高兴我能够解决它。

【讨论】:

  • 我也有类似的情况。我无法弄清楚为什么我的结构加载因重复条目而失败。原来rails db:structure:load(以及,我假设,所有其他 db: 任务)将遍历database.yml 中列出的每个数据库,而不仅仅是开发数据库。我的数据库在test 中重复。我想我不能那样做:)
  • @DavidDombrowsky 废话,这正是我的问题所在。这对我来说似乎是一个公然的错误!谢谢,我真的被这个弄糊涂了。
  • 我遇到了同样的问题,因为我从 ENV 中提取数据库名称,例如 database: <%= ENV["MYSQL_DATABASE"] %>,所以我所有的环境都有相同的数据库,它试图运行所有环境,即使指定 RAILS_ENV RAILS_ENV=development rake db:drop .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2019-03-03
相关资源
最近更新 更多