我们将 ActiveAdmin 和 CircleCI 与 Postgres 和 Rails 3 一起使用。它工作正常,但在添加新的 ActiveAdmin 模型后,我们在以下过程中得到了这个rake db:create db:schema:load
:
PG::UndefinedTable: ERROR: relation "external_videos" does not exist
...
/home/ubuntu/Swearnet/app/models/external_video.rb:11:in `<class:ExternalVideo>'
/home/ubuntu/Swearnet/app/models/external_video.rb:1:in `<top (required)>'
...
/home/ubuntu/Swearnet/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.14/lib/active_support/dependencies.rb:190:in `const_missing'
/home/ubuntu/Swearnet/app/admin/external_video.rb:1:in `<top (required)>'
...
/home/ubuntu/Swearnet/config/routes.rb:54:in `block in <top (required)>'
如果我们删除新文件(即使这个文件与我们的任何其他 ActiveAdmin 文件没有本质区别),错误就会消失。
这个错误似乎是路由导致 ActiveAdmin 加载,这导致 ExternalVideo 模型被自动加载,这导致它查找尚未创建的 external_videos 表。为什么我们的其他 ActiveAdmin 文件不会发生这种情况?以前有没有其他人遇到过这种问题?
我们的新文件app/admin/external_videos.rb
看起来像:
ActiveAdmin.register ExternalVideo do
menu :parent => "Shows"
form do |f|
f.inputs nil do
f.input :title
f.input :description
f.input :published_at
f.input :expires_at
end
f.actions
end
end
编辑:我们发现了问题...... ExternalVideo 上有一个名为find_by_sxg_id
. 当我们将该范围重命名为时,get_by_sxg_id
一切正常。我不知所措......我知道这find_by
通常是一个神奇的 ActiveRecord 前缀,但不确定在 rake 任务中创建表之前,仅仅是定义如何导致表被访问......