使用 rake db:migrate 迁移数据不会改变它

     2023-03-14     256

关键词:

【中文标题】使用 rake db:migrate 迁移数据不会改变它【英文标题】:Migrating data with rake db:migrate does not change it 【发布时间】:2014-06-20 06:40:44 【问题描述】:

我正在为 rails 和 db:migrate 苦苦挣扎。我使用此代码进行了迁移

class SetDefaultInstallmentsForLicenses < ActiveRecord::Migration
  def up
    License.where(code: 'LEADER').each do |leader|
      puts "Modifying license #leader.id with code #leader.code"
      leader.installment_available = true
      leader.installment_number = 5
      leader.save
      puts "After save #leader.installment_available #leader.installment_number"
      leader = License.find(leader.id)
      puts "After save #leader.installment_available #leader.installment_number"
    end
  end

  def down
  end
end

运行迁移后有这个输出

==  SetDefaultInstallmentsForLicenses: migrating ==============================
Modifying license 3 with code LEADER
After save true 5
After save f
==  SetDefaultInstallmentsForLicenses: migrated (0.0037s) =====================

清晰可见执行了迁移,找到了记录,更改并保存了,但重新加载记录后,更改不存在。 怎么了?

【问题讨论】:

你应该做puts leader.save,才能真正知道保存是否成功。 leader.save 返回 true 【参考方案1】:

您确定它已被保存。我不是。地点:

puts leader.errors.full_messages.to_sentence

leader.save 字符串之后

【讨论】:

【参考方案2】:
  leader.save
  puts "After save #leader.installment_available #leader.installment_number"
  ==> After save true 5  

以上仅显示来自local variable leaderinstallment_availableinstallment_number 字段的值,而不是从数据库中提取值。 这并不意味着这些字段已成功保存在数据库中。

  leader = License.find(leader.id)
  puts "After save #leader.installment_available #leader.installment_number"

但上面是从数据库中获取记录,并清楚地表明更新没有保存在数据库中。

使用leader.save! 代替leader.save。这样,如果记录没有保存,那么您将确切知道为什么由于引发的异常而没有保存它。

更新

根据 OP 对此问题的回答

我试着放了

License.reset_column_information

在代码之前,它似乎是 现在工作。我不知道为什么这里需要这个。我所有的其他 迁移似乎工作正常。

我对@9​​87654329@ 到底做了什么做了一点研究。我发现 Using Models in Your Migrations 说:

使用本地模型时,最好调用 Product.reset_column_information 来刷新 Active Record 缓存 更新数据库中的数据之前的产品模型。

希望这有助于您理解为什么需要License.reset_column_information

【讨论】:

大声笑......他们从文档中删除了这个。难怪我花了很长时间才找到 WTF,Rails。 在我的例子中,save! 没有引发异常,即使该列未能更新。此外,您可以使用leader.reload 而不是leader = License.find(leader.id) 来刷新数据库中的记录。【参考方案3】:

我试着放了

License.reset_column_information

在代码之前,它现在似乎正在工作。 我不知道为什么这里需要这个。我的所有其他迁移似乎都运行正常。

【讨论】:

有关详细信息,请参阅我的更新答案。

Ruby on Rails:如何使用 rake db:migrate 恢复迁移?

】RubyonRails:如何使用rakedb:migrate恢复迁移?【英文标题】:RubyonRails:HowcanIrevertamigrationwithrakedb:migrate?【发布时间】:2011-12-0309:58:12【问题描述】:安装设计模型用户后,我得到了这个。classDeviseCreateUsers<ActiveRecord::Migrationdefself... 查看详情

运行 rake db:migrate 后,我的架构不会更新

】运行rakedb:migrate后,我的架构不会更新【英文标题】:Myschemawon\'tupdateafterIrunrakedb:migrate【发布时间】:2016-10-3103:23:34【问题描述】:运行后:railsgmodelcategory并更新我的迁移以显示:classCreateCategories<ActiveRecord::Migrationdefchangecr... 查看详情

如何使用 rake db:migrate 仅回滚一步

】如何使用rakedb:migrate仅回滚一步【英文标题】:Howtorollbackjustonestepusingrakedb:migrate【发布时间】:2011-05-2003:58:53【问题描述】:在db/migrate文件夹中添加迁移文件并运行rakedb:migrate后,我想回到上一步,我认为使用VERSION=n是正确的... 查看详情

在 git hook 中使用 rake db:migrate - 未定义的类/模块编码

】在githook中使用rakedb:migrate-未定义的类/模块编码【英文标题】:Usingrakedb:migrateingithook-undefinedclass/moduleEncoding【发布时间】:2012-09-3019:05:14【问题描述】:我正在使用https://github.com/thuss/standalone-migrations在cakephp环境中执行数据库... 查看详情

Heroku run rake db:migrate 导致数据库没有变化,应用重启了几次

】Herokurunrakedb:migrate导致数据库没有变化,应用重启了几次【英文标题】:Herokurunrakedb:migrateresultsinnochangeinthedatabase,apprestartedseveraltimes【发布时间】:2013-03-2204:39:48【问题描述】:我在将迁移推送到生产数据库时遇到问题。问题... 查看详情

rake db:migrate 遇到未定义方法的错误

】rakedb:migrate遇到未定义方法的错误【英文标题】:rakedb:migraterunsintoanerrorforanundefinedmethod【发布时间】:2018-04-1118:52:48【问题描述】:我接管了一个由其他人建立的网站。我现在正试图在localhost上启动并运行它。但是,当我迁移... 查看详情

尝试 rake db:migrate 时未在 rails 项目中选择数据库

】尝试rakedb:migrate时未在rails项目中选择数据库【英文标题】:Databasenotbeingselectedinrailsprojectwhenattemptingtorakedb:migrate【发布时间】:2011-06-2204:31:12【问题描述】:使用Rails应用程序,遇到一些奇怪的数据库/rake问题。当我执行时:ra... 查看详情

在 Heroku 上执行 rake db:migrate 时出错

】在Heroku上执行rakedb:migrate时出错【英文标题】:Errorwhendoingrakedb:migrateonHeroku【发布时间】:2012-09-0622:57:48【问题描述】:什么时候做herokurunrakedb:migrate执行所有迁移,然后,最后我总是收到以下消息:/app/vendor/bundle/ruby/1.9.1/bin/r... 查看详情

获取:“迁移待定;运行 'bin/rake db:migrate RAILS_ENV=development' 来解决此问题。”克隆和迁移项目后

】获取:“迁移待定;运行\\\'bin/rakedb:migrateRAILS_ENV=development\\\'来解决此问题。”克隆和迁移项目后【英文标题】:Getting:"Migrationsarepending;run\'bin/rakedb:migrateRAILS_ENV=development\'toresolvethisissue."aftercloningandmigratingtheproje 查看详情

Rails 3 和 Heroku:推送时自动“rake db:migrate”?

】Rails3和Heroku:推送时自动“rakedb:migrate”?【英文标题】:Rails3andHeroku:automatically"rakedb:migrate"onpush?【发布时间】:2011-08-2309:41:27【问题描述】:我对我的heroku推送/部署过程有点烦恼,否则发现和使用它是一种乐趣。如... 查看详情

如何运行 db:migrate 从另一个带参数的 rake 任务?

】如何运行db:migrate从另一个带参数的rake任务?【英文标题】:Howtorundb:migratefromanotherraketaskwithparameters?【发布时间】:2014-10-0818:27:28【问题描述】:我想从另一个rake任务中调用db:drop、db:create、db:migrate并像命令“rakedb:migratedb=test... 查看详情

rake db:migrate 在开发 AWS Beanstalk 中运行

】rakedb:migrate在开发AWSBeanstalk中运行【英文标题】:rakedb:migraterunsindevelopmentAWSBeanstalk【发布时间】:2015-08-1402:13:29【问题描述】:我是Beanstalk的新手。我创建了一个Rails应用程序并将数据库生产配置设置为使用AWS希望提供的环境... 查看详情

兼容性问题? rake db:migrate - 参数数量错误(1 代表 0)

】兼容性问题?rakedb:migrate-参数数量错误(1代表0)【英文标题】:Compatibilityissue?rakedb:migrate-wrongnumberofarguments(1for0)【发布时间】:2015-01-2504:48:08【问题描述】:我正在尝试运行一个简单的迁移,但出现此错误。我认为这是某种... 查看详情

为啥 rake db:migrate:reset 未在 rake -T 中列出?

】为啥rakedb:migrate:reset未在rake-T中列出?【英文标题】:Whyisrakedb:migrate:resetnotlistedinrake-T?为什么rakedb:migrate:reset未在rake-T中列出?【发布时间】:2011-04-2611:25:29【问题描述】:为什么rake-T没有列出一些rake任务?喜欢db:migrate:reset... 查看详情

rake db:migrate 导致 StandardError - 未初始化的常量 CreateObjects::Object

】rakedb:migrate导致StandardError-未初始化的常量CreateObjects::Object【英文标题】:rakedb:migratecauseStandardError-uninitializedconstantCreateObjects::Object【发布时间】:2015-12-2721:16:45【问题描述】:我有迁移20150930051523_create_objects.rb:classCreat 查看详情

CH2 Hartl 教程迁移正在等待。要解决此问题,请运行: bin/rake db:migrate RAILS_ENV=development

...artl教程迁移正在等待。要解决此问题,请运行:bin/rakedb:migrateRAILS_ENV=development【英文标题】:CH2HartlTutorialMigrationsarepending.Toresolvethisissue,run:bin/rakedb:migrateRAILS_ENV=development【发布时间】:2015-01-2708:52:44【问题描述】:我正在编写Ha... 查看详情

Can't rake:db migrate - 继续让 'rake 中止!加载错误' [重复]

】Can\\\'trake:dbmigrate-继续让\\\'rake中止!加载错误\\\'[重复]【英文标题】:Can\'trake:dbmigrate-Keepgettinga\'rakeaborted!loaderror\'[duplicate]Can\'trake:dbmigrate-继续让\'rake中止!加载错误\'[重复]【发布时间】:2014-10-2215:57:24【问题描述】:我使... 查看详情

尝试在 Rails 引擎中 rake db:migrate 时使用 Rakefile 出现 LoadError

】尝试在Rails引擎中rakedb:migrate时使用Rakefile出现LoadError【英文标题】:LoadErrorwithRakefilewhentryingtorakedb:migrateinaRailsengine【发布时间】:2015-02-0223:56:22【问题描述】:我从https://github.com/vinsol/fullcalendar-rails-engine.git分叉了fullcalendar 查看详情