Ruby on rails Rails数据库鸡和蛋错误

Ruby on rails Rails数据库鸡和蛋错误,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,我正在重构Rails应用程序。在一个表中,我有一个名为set的列,我需要将其重命名为configuration\u set。我已经更改了代码以应对更改,并创建了一个迁移来重命名列 现在的问题是我无法运行迁移: class AlignConfigurationValuesColumns < ActiveRecord::Migration def self.up rename_column :configuration_values, :set, :configuration_set e

我正在重构Rails应用程序。在一个表中,我有一个名为
set
的列,我需要将其重命名为
configuration\u set
。我已经更改了代码以应对更改,并创建了一个迁移来重命名列

现在的问题是我无法运行迁移:

class AlignConfigurationValuesColumns < ActiveRecord::Migration

def self.up
  rename_column :configuration_values, :set, :configuration_set
end
class AlignConfigurationValuesColumns
我得到以下错误:

rake aborted!
undefined method `find_by_configuration_set_and_key' for #<Class:0x7f2c7a879580>
rake中止!
未定义的方法“通过配置查找设置和键查找”#
undefined函数是在新代码上调用的动态find_by方法,但在执行数据库迁移之前它不存在

有什么想法吗?
Thx

请尝试以下操作,而不是
更改列

rename_column :configuration_values, :set, :configuration_set

请尝试以下操作,而不是更改列

rename_column :configuration_values, :set, :configuration_set

运行迁移时崩溃,因为动态方法
find\u by\u configuration\u set\u和\u key
未定义。此动态方法仅在执行迁移后定义,因为迁移将列
set
重命名为
configuration\u set

我现在找到了一种执行迁移的方法,尽管它并不完美

在插件中调用方法
find\u by\u configuration\u set\u和\u key
的代码。我更改了environment.rb,这样插件就不会被加载,从而允许我运行Rails数据库迁移。然后我把它放回去,重新启动应用程序

这个解决方案比使用mysql客户端更好,但仍然是一个漏洞。
感谢大家的好主意和讨论。

运行迁移会崩溃,因为动态方法
按配置查找设置和密钥未定义。此动态方法仅在执行迁移后定义,因为迁移将列
set
重命名为
configuration\u set

我现在找到了一种执行迁移的方法,尽管它并不完美

在插件中调用方法
find\u by\u configuration\u set\u和\u key
的代码。我更改了environment.rb,这样插件就不会被加载,从而允许我运行Rails数据库迁移。然后我把它放回去,重新启动应用程序

这个解决方案比使用mysql客户端更好,但仍然是一个漏洞。
感谢大家的好主意和讨论。

您能发布迁移代码吗?将代码更改回来,迁移,然后修复代码?@JamesAdam-Rails在执行迁移之前崩溃。我已将其添加到问题描述中。听起来好像rake db:migrate在应用程序重新启动之前没有运行。。。胡乱猜测:您是否需要在rake db:migrate调用中包含正确的RAILS_ENV=blah参数?听起来好像迁移没有运行。在Heroku上,它会在服务器重新启动之前运行。无论部署环境如何,都需要确保首先运行迁移。您的另一个早期迁移是使用模型代码还是执行动态迁移?如果是这样,最好避免在迁移中使用应用程序中的任何代码,特别是因为这个问题。是否可以发布迁移代码?将代码更改回,迁移,然后修复代码?@JamesAdam-Rails在执行迁移之前崩溃。我已将其添加到问题描述中。听起来好像rake db:migrate在应用程序重新启动之前没有运行。。。胡乱猜测:您是否需要在rake db:migrate调用中包含正确的RAILS_ENV=blah参数?听起来好像迁移没有运行。在Heroku上,它会在服务器重新启动之前运行。无论部署环境如何,都需要确保首先运行迁移。您的另一个早期迁移是使用模型代码还是执行动态迁移?如果是这样,最好避免在迁移中使用应用程序中的任何代码,特别是因为这个问题。关于迁移语法,您是对的,我已经更新了问题描述。然而,迁移不是问题所在。Rails在执行迁移之前崩溃,因为动态方法find_by_configuration_set_和_key不存在,因为列配置_set不存在。它只有在迁移执行后才会存在。关于迁移语法,您是对的,我已经更新了问题描述。然而,迁移不是问题所在。Rails在执行迁移之前崩溃,因为动态方法find_by_configuration_set_和_key不存在,因为列配置_set不存在。它只有在执行迁移后才会存在。在迁移中定义模型似乎也很有趣,但我无法使其工作:在迁移中定义模型似乎也很有趣,但我无法使其工作: