ruby-on-rails – ActiveRecord中的表名损坏错误
偶尔我们在使用ActiveRecord时会出现PG :: UndefinedTable错误.关联表名称是一些如何损坏,我经常看到
取消附加到表名的末尾. 例如: ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "fooCancell" does not exist ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "Cancelled" does not exist ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "barC" does not exist 在上面的示例中,我使用foo和bar对表名进行了模糊处理. 当rails项目在Puma中运行时,我们会看到这个错误.队列工作人员似乎做得很好. 错误消息中的表与实际表或模型不对应.它看起来像是内存损坏的情况.有没有人见过这样的问题?如果是这样,你是如何解决它的? puma.rb on_worker_boot do ActiveRecord::Base.establish_connection end database.yml的 production: url: <%= ENV["DATABASE_URL"] %> pool: <%= ENV['DB_CONNECTION_POOL_SIZE'] || 5%> reaping_frequency: <%= ENV['DB_CONNECTION_REAPING_FREQUENCY'] || 10 %> prepared_statements: false 解决方法
基于
this possibly related error,我在这里猜测…
但你可能是: >在您的应用程序中调用fork;要么 这些中的任何一个都会破坏ActiveRecord的同步并导致多个进程共享数据库连接池而不同步它的使用(导致隔行扫描和损坏的数据库命令). 如果您正在使用fork,请确保关闭所有ActiveRecord数据库连接并重新初始化连接池(有一个函数调用,但我不记得它的顶部,可能是ActiveRecord.disconnect!或ActiveRecord .connection_pool.disconnect!). 否则,在运行Puma之前(在初始化过程中或使用Puma的after_fork),关闭所有ActiveRecord数据库连接并重新初始化连接池. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |