首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord::NoEnvironmentInSchemaError

ActiveRecord::NoEnvironmentInSchemaError
EN

Stack Overflow用户
提问于 2017-08-29 02:37:28
回答 5查看 8.7K关注 0票数 26

我正在尝试在我新升级的应用程序(Rails5)上执行与数据库相关的操作,但我无法在本地执行破坏性的数据库命令。

或者

..。

跟踪结果为以下数据,

代码语言:javascript
复制
rails db:drop --trace
** Invoke db:drop (first_time)
** Invoke db:load_config (first_time)
** Execute db:load_config
** Invoke db:check_protected_environments (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config
** Execute db:check_protected_environments

rails aborted!
ActiveRecord::NoEnvironmentInSchemaError: 

Environment data not found in the schema. To resolve this issue, run: 

    bin/rails db:environment:set RAILS_ENV=development

到目前为止我试过的是,

设置

,不会更改任何内容,但仍会发生错误。

手动设置开发环境变量。

这些都没有帮助。我正在寻找修复或解决方法。

EN

回答 5

Stack Overflow用户

发布于 2020-01-21 00:02:22

两个修复

这里的其他答案很好地描述了问题,但缺乏适当的解决方案。希望这个答案能帮助遇到这个问题的人。

为什么会发生这个错误

此不正确的错误消息是由于

此拉取请求

旨在防止对生产数据库的破坏性操作。作为

u/pixelearth正确地指出

,Rails 4.2定义了

表是一个整数,而Rails 5+ (包括Rails 6)希望它是一个带有值的字符串,

..。当Rails 5和Rails 6运行此安全检查时,它们会错误地引发

因为代码与Rails 4模式格式不兼容。

修复#1:覆盖Rails 5+中的安全检查

*

*

请记住,安全检查的实施是由于

如此多的用户意外地丢弃了他们的生产数据库

..。正如问题所描述的,这些操作是破坏性的。

从终端:

代码语言:javascript
复制
rails db:drop RAILS_ENV=development DISABLE_DATABASE_ENVIRONMENT_CHECK=1
# and/or
rails db:drop RAILS_ENV=test DISABLE_DATABASE_ENVIRONMENT_CHECK=1

如上所述

这里

、、

标志禁用环境检查。之后,您可以运行

中的正确架构重新创建数据库。

表格。

修复#2:恢复到Rails 4,删除数据库,返回到Rails 5+并重新创建

从终端:

代码语言:javascript
复制
git log
# grab the commit hash from before the upgrade to Rails 5+

git checkout **hash_from_rails_4**
rake db:drop RAILS_ENV=development
rake db:drop RAILS_ENV=test

git checkout master

# now things should work
rails db:migrate

同样,在覆盖此功能时,请确保您没有指向生产数据库。或者,也可以直接修改这个表的模式。如果您在生产中遇到此错误,则可能需要采用此方法。

票数 22
EN

Stack Overflow用户

发布于 2018-04-04 21:08:03

这是因为,出于某种原因,您的表

被删除或更改。如果不能通过命令行删除数据库,则需要通过DBMS或数据库客户端删除。然后,只需运行

创建并运行迁移。

票数 13
EN

Stack Overflow用户

发布于 2019-05-26 08:22:52

对于后人来说,我的问题是这个模式是由rails 4应用程序生成的,而当前使用它的应用程序是rails 5。

_

内部

_

元数据表发生了细微的变化。键字段需要是字符串,并且包含单词“environment”,而不是整数。只有当这一点被改变时,这个错误才会消失。

在Rails5中应该是这样的

即,更改ar的类型

_

国际

_

元数据#字符串的关键字...

我的情况有点不常见,涉及到一个Rails4应用程序和一个Rails5应用程序共享同一个数据库。当我需要“更新”时,我有一个任务:

代码语言:javascript
复制
puts "Modifying Rails 4 schema to fit Rails 5 schema"
  file_name = "./db/schema.rb"
  rails_4_ar_internal_metadata = 'create_table "ar_internal_metadata", primary_key: "key", force: :cascade do |t|'
  rails_5_ar_internal_metadata = 'create_table "ar_internal_metadata", primary_key: "key", id: :string, force: :cascade do |t|'
  new_schema = File.read(file_name).gsub(rails_4_ar_internal_metadata, rails_5_ar_internal_metadata)
  File.write(file_name, new_schema)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45925383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档