问题标签 [schema.rb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
484 浏览

ruby-on-rails - drop_table 迁移无法删除表

我读了很多关于它的内容,但我仍然无法摆脱我的数据库中的一张表:

我没有创建此表的迁移。但我认为这张表来自先前安装的acts_as_votable gem。但我可能已经手动删除了这个迁移......

我尝试如下 drop_table ,但它不起作用。即使我有这个迁移文件,投票表仍然存在:

我应该怎么做才能从我的schema.rb文件中删除这个表?

编辑:解决方案

即使在运行迁移之后,该表仍在我的schema.rb中,所以我使用了 rails 控制台:

而这张桌子终于消失了。

0 投票
0 回答
106 浏览

ruby-on-rails - 让我们的 CI 服务器自动运行 rails 迁移并提交 schema.rb 是个好主意吗?

在我的公司,我们看到字段出现/消失、出现错误表以及schema.rb文件中冲突的间歇性问题。这些问题一直在发生,浪费了我们的时间。

我很难让我的同事相信我们的迁移/schema.rb问题可以通过使用标准工作流程来解决。

首先,事实:

  • 我们schema.rb有源代码控制
  • 我们知道这schema.rb应该是我们数据库的最终事实来源
  • 我们在生产/QA 中使用 SqlServer,在开发/测试中使用 Postgresql
  • 这意味着我们实际上有两个schema.rb文件:一个用于 SqlServer,一个用于 Postgresql。
  • 我们当前的schema.rb文件与我们的生产数据库不同步,因为我们允许开发人员通过本地更改来污染它。

我相信(大部分)我们的迁移/schema.rb问题将通过遵循这个简单的规则来解决:

在运行迁移之前,请始终将架构加载到新创建的数据库中:

rake db:drop db:create db:schema:load db:migrate

然后,仔细检查您的更改,以确保只有迁移中的更改被提交到 schema.rb

我的同事认为最好不要让开发人员更改schema.rb,而是在我们的 Jenkins 服务器上设置一个任务,该任务将运行迁移并自动提交更改到schema.rb. 他说我们应该从我们的流程中去除人为因素,并使工作自动化,这不会让未来发生问题。

虽然我相信自动化工作,但我不认为这是最好的解决方案,因为它只是针对症状而不是原因。自动化 git 提交让我很紧张,因为很多事情都可能出错。更重要的是,分离迁移及其相应的schema.rb变化对我来说似乎是一个非常糟糕的主意。我们不应该继续让我们的开发人员忽视污染的负面影响schema.rb。相反,我们应该教他们一个更好的工作流程,避免污染schema.rb,并让他们知道在将来发生问题时调试问题。

人们可以权衡并推荐我们的哪种解决方案更好吗?还是我们还没有想到的更好的解决方案?

0 投票
1 回答
1273 浏览

mysql - sqlite 数据库中是否可以有相同的索引名称?

我有一个 Ruby on Rails 应用程序,开发数据库在 Mysql 中。我决定使用 sqlite 数据库进行测试。为了做到这一点,我做了以下事情:

  1. 配置database.yml文件以支持 test.sqlite3 用于测试环境

  2. 使用转储当前开发数据库模式rake db:schema:dump

  3. 尝试使用 schema.rb 通过命令在 test.sqlite3 数据库文件中生成表。rake db:test:clone

然后就轰轰烈烈了。我有一个例外

当我仔细检查迁移文件和架构时,我意识到在多个表中使用了相同的索引名称。例如,schema.rb 中的一些语句是这样的:

我知道mysql在表的范围内保持索引名称的唯一性。现在一个简单的解决方案可能是恢复到mysql用于测试数据库。我无法弄清楚的是在这种特殊情况下是否有可能从 schema.rb 生成一个 sqlite 文件。

现在是奇怪的部分。我进行了以下更改并在虚拟应用程序中进行了测试。

有效!现在我可能很想在我的真实应用程序中做同样的事情。严酷的现实是有很多地方我需要进行重命名和生产,这将不仅仅是一项繁琐的任务,因为如果我删除旧索引并添加新索引,我们有数百万条记录会受到影响(Mysql 5.5) . 有出路吗?

0 投票
2 回答
5329 浏览

ruby-on-rails - 如何在 Ruby on Rails 中重新创建 Schema.rb(删除后)?

我错误地(有点)删除了我的 Schema.rb,我似乎无法通过使用 rake db:dump 将其重新生成到 db/ 中,我现在真的不知道该怎么做。

一些建议 rake db:dump:all rake db:create:all rake db:migrate

没有任何效果。请帮忙!

0 投票
2 回答
669 浏览

ruby-on-rails - 无法从 rails 应用程序中删除 schema.rb 中的表

我使用 Rails 4.0 和 Ruby 2.3.0

我有一个小的 Rails 应用程序。起初,我想根据每个用户注册的内容为他/她分配不同的角色。所以我从https://github.com/MartinJNash/Royce试用了“Royce”宝石

在看到它对我的要求来说太复杂后,我将其卸载。

然后我尝试了“简单角色”gem,看看它是如何从这里https://github.com/stanislaw/simple_roles工作的。我也卸载了tat。当我的应用程序中有这两个 gem 时,我运行了 db:migrate。

现在我不想在我的 schema.rb 中找到这两个 gem 的对应表。它并不完全干扰我的应用程序,但我想删除它们。

以下是我的 schema.rb 文件

即使我已经卸载了 2 个角色-gems,每次我运行 rake db:migrate 时,我都会得到上述模式。

我只在我的应用程序中使用“会话”和“供应商”表。知道我应该怎么做才能摆脱这些不需要的表吗?

0 投票
1 回答
1160 浏览

ruby-on-rails - 我可以重建 db/schema.rb 以包含多个数据库而不进行迁移吗?

我有一个使用三个不同现有数据库的 Rails 5 应用程序。此应用程序不需要迁移。我想构建db/schema.rb包括所有三个数据库,而不仅仅是主数据库。执行rake db:schema:dump使用主数据库重建模式。我相信有一种方法可以做到这一点,但由于某种原因,我一直在寻找的方式我找不到任何关于此的信息。我发现的所有帖子都讨论了如何使用来自不同数据库的模型,而不是如何重建模式以包含所有数据库。

0 投票
3 回答
958 浏览

ruby-on-rails - 无论分支如何,迁移都会运行

我在不同的分支上工作,在这些分支上有迁移文件。有一个schema.rb文件。

我的问题是,无论我目前在哪个分支上,运行迁移schema.rb都会以某种方式改变,就好像它考虑了所有分支上的所有迁移一样。

说,我已经在具有相应表Foo的分支上创建了模型,运行迁移并切换到另一个分支。Afoos

在我当前没有表bars的分支上运行其他迁移(比如创建表) ,创建它:Bfoos

问题:如何schema.rb仅根据当前分支上的迁移进行更改?

0 投票
2 回答
4510 浏览

ruby-on-rails-5 - 在 Rails 5 中,设置 config.active_record.schema_format = :sql 但仍然在 db:migrate 上创建 schema.rb

在 Rails 5 应用程序上工作,我想使用structure.sql而不是schema.rb(我们正在使用带有大量自定义 SQL 调用的 PostGIS...)。在config/initializers/database_options.rb我有以下内容:

如果我运行以下命令:

它生成db/schema.rb而不是 db/structure.sql

铁轨指南说:

有两种方法可以转储模式。这是由 config.active_record.schema_format 设置在 config/application.rb 中设置的,它可以是 :sql 或 :ruby。

我在这里缺少什么魔法?

0 投票
2 回答
171 浏览

ruby-on-rails - PG::UndefinedColumn: ERROR in case of same DB is used for two different projects which are connected to each other in Rails

我正在使用 git 将两个项目作为不同的存储库运行。一个是承认另一个Web在rails中,两者都相互连接,使用基本相同的数据库。我只在管理报告上进行了迁移,然后将其克隆到网络中。问题是,我将它部署在服务器上并且测试用例失败了错误说

我只是不明白为什么会这样,在管理员中我有那个字段。

我认为 schema.rb 可能在这种情况下发挥作用。我不太确定。

这是我的迁移,

这是我正在开发的模型领域:

这是我在测试中的模型字段:

这是我的错误快照:

在此处输入图像描述

任何帮助将不胜感激。

0 投票
1 回答
769 浏览

ruby-on-rails - 如何在 Rails 应用程序中重新排序表列?

我在我的 Rails 应用程序中创建了一个模型,一段时间后意识到我忘记添加一些属性,后来通过生成的迁移添加了它们。

我现在意识到属性列schema.rb的顺序是它们将出现在 ActiveAdmin 中生成的资源视图中的顺序。

当我在 ActiveAdmin 中查看该模型时,我想对列重新排序,而我认为这样做的唯一方法是更改​​数据库中的列顺序。

我查看了此处此处,并尝试使用change_tableor运行数据库迁移change_column。这没有产生任何变化。

这是我运行的迁移,但没有结果:

为了以特定顺序查看 ActiveAdmin 中的属性列,我运行了数据库迁移以更改列,但迁移并未对列重新排序。