0

我去查看我的 schema.rb 文件,发现以下内容:

ActiveRecord::Schema.define(version: 20140729164926) do

# Could not dump table "account_services_indices" because of following NoMethodError
#   undefined method `default_function' for
#<ActiveRecord::ConnectionAdapters::PostgreSQLColumn:0x757a77>
...

数据库中的每个表都重复最后三行!

数据库似乎工作正常。我可以做一个 db:rollback 和 db:migrate 没有问题,除了重新生成的 schema.rb 仍然看起来像上面那样。回顾我的 GIT 存储库,它发生在 2014 年 7 月 29 日左右。该提交中唯一与数据库相关的更改是次要迁移,向两个表中的每个表添加一列。我尝试了一个 db:rollback,然后是 db:schema:dump,但没有运气。那时的其他提交只是对视图和控制器的更改。

我正在使用“activerecord-jdbcpostgresql-adapter”gem。1.3.9 版于 2014 年 7 月 7 日发布。在 Gemfile 中强制将其返回到 1.3.8 版,捆绑并再次尝试 db:schema:dump,但仍然是同样的事情。 删除数据库并重新开始可能会奏效并且不会造成灾难性后果,但我现在不想丢失所有的开发数据。

重命名了 database.yml 中的数据库。创建了那个新数据库并使用 db:migrate 构建它。生成的 schema.rb 仍然是相同错误的列表。

有什么建议么?

4

1 回答 1

0

解决了!

我仍然不确定确切的原因,但这是我的解决方案。我从头开始创建了一个名为 Blog 的 Rails 应用程序,然后开始复制我在实际应用程序中使用的 gem。测试应用程序是使用生成的

gem 'rails', '4.1.4'

并且没有问题。我把它改成了

gem 'rails', '4.0.0'

匹配我的真实应用程序并进行捆绑更新和捆绑安装。执行 rake db:schema:dump 然后给了我以下错误:

rake aborted!
NoMethodError: undefined method `configure' for #<Blog::Application:0x6932cb>
/home/mpipkorn/rails_projects/blog/config/environments/development.rb:1:in `(root)'
/home/mpipkorn/rails_projects/blog/config/environment.rb:5:in `(root)'
Tasks: TOP => db:schema:dump => environment

在 StackOverflow 的带领下,我做了以下事情:

将 app/config/initializers/development.rb 中的第一行从

Rails.application.configure do

Blog::Application.configure do

这与我的真实应用程序中的格式相匹配。我再次 rake db:schema:dump 。这次 rake 任务运行没有错误,但是查看生成的 schema.rb 文件,我看到了

ActiveRecord::Schema.define(version: 20140806174338) do

# Could not dump table "articles" because of following NoMethodError
#   undefined method `default_function' for #<ActiveRecord::ConnectionAdapters::PostgreSQLColumn:0x183e66e>

end

将博客 Gemfile(返回)更改为

gem 'rails', '4.1.4'

并进行捆绑更新和捆绑安装,然后执行 rake db:schema:dump 现在会生成看起来正常的 schema.rb 文件,并且没有错误消息!

底线是在我的实际应用程序中将 rails gem 从 4.0.0 更改为 4.1.4 解决了我的问题。究竟是什么导致了这一切我仍然不确定,但一路上的更新似乎有问题,并且某些版本的 gem 组合不起作用,也许是 activerecord-jdbcpostgresql-adapter 1.3 的组合。 9 与 Rails 4.0.0。

于 2014-08-06T20:36:26.463 回答