我目前正在迁移
class CreateSlugSequence < ActiveRecord::Migration[5.2]
def up
execute <<-SQL
CREATE SEQUENCE slug_sequence
SQL
end
def down
execute <<-SQL
DROP SEQUENCE slug_sequence
SQL
end
end
我运行rails db:migrate
进入rails c(开发模式)
运行ActiveRecord :: Base.connection.exec_query(“ select nextval('slug_sequence')”)[0] ['nextval']
并获得期望值
但是如果由于某种原因在测试模式下输入rails c,则序列表不存在
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "slug_sequence" does not exist
我运行了ActiveRecord::Migrator.current_version
,以检查上一次应用的迁移是什么,并返回最新版本。
非常感谢您的帮助。
答案 0 :(得分:1)
我建议删除测试数据库并重新创建它。尽管这些应该保持同步,但有时却不同步,您必须执行手动步骤才能将它们组合在一起。
RAILS_ENV=test rake db:reset
奇怪的是,它不起作用,在该任务中放置撬动调试器并查看发生了什么会很有趣。 https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L122
手动步骤
RAILS_ENV=test rake db:drop
RAILS_ENV=test rake db:create
RAILS_ENV=test rake db:migrate
答案 1 :(得分:0)
我找到了修复rails db:reset
命令的方法,您只需要在config.active_record.schema_format = :sql
中添加行application.rb
,以便将有关序列的信息存储在structure.sql
中。请注意,默认模式转储:ruby
中关于序列的信息未存储在schema.rb
文件中。
重要:确保首先使用structure.sql
创建rails db:migrate
,然后运行rails db:reset
。仅rails db:migrate
之后,我仍然收到您要修复的错误。