加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – ActiveRecord中的表名损坏错误

发布时间:2020-12-17 04:38:15 所属栏目:百科 来源:网络整理
导读:偶尔我们在使用ActiveRecord时会出现PG :: UndefinedTable错误.关联表名称是一些如何损坏,我经常看到 取消附加到表名的末尾. 例如: ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "fooCancell" does not exist ActiveRecord::State
偶尔我们在使用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;要么
>在服务器(puma)分支工作进程(在应用程序初始化期间)之前调用ActiveRecord例程(使用数据库调用).

这些中的任何一个都会破坏ActiveRecord的同步并导致多个进程共享数据库连接池而不同步它的使用(导致隔行扫描和损坏的数据库命令).

如果您正在使用fork,请确保关闭所有ActiveRecord数据库连接并重新初始化连接池(有一个函数调用,但我不记得它的顶部,可能是ActiveRecord.disconnect!或ActiveRecord .connection_pool.disconnect!).

否则,在运行Puma之前(在初始化过程中或使用Puma的after_fork),关闭所有ActiveRecord数据库连接并重新初始化连接池.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读