【问题标题】:postgres production database isn't synced with heroku apppostgres 生产数据库未与 heroku 应用程序同步
【发布时间】:2016-10-01 16:58:25
【问题描述】:

在使用此迁移删除 Active Record 表后,我首先注意到了问题:

class DropDelayedJobTables < ActiveRecord::Migration
  def change
    drop_table :delayed_jobs
  end
end

bundle exec rake db:migrate 好像成功掉表了;它从 rake db:schema:dump 之后的架构中消失了;并且记录似乎不再通过 heroku 控制台存在。但是,该表仍然存在于我的 postgres 生产数据库中!

$ psql myapp_production
myapp_production=# \dt
 Schema |       Name        | Type  |   Owner   
--------+-------------------+-------+-----------
 public | delayed_jobs      | table | leoebrown
 public | foods             | table | leoebrown
 public | lists             | table | leoebrown
 public | quantities        | table | leoebrown
 public | schema_migrations | table | leoebrown
 public | users             | table | leoebrown

我还注意到,当我通过 heroku 控制台 (Food.find(1234).destroy) 删除记录时,这些记录仍然存在于 myapp_production postgres 数据库中。比如我查看postgres数据库中的食物数量是:

myapp_production=# SELECT COUNT(*) from FOODS;
 count 
-------
  6716
(1 row)

但是当我在 heroku 控制台中运行 Food.count 时,结果是 一般来说,我的 postgres 数据库似乎与我的 live heroku 应用程序断开了连接。

$heroku run console
irb(main):001:0> Food.count
=> 6161

当我查看直播网站中的食物数量时,是 6161。

显然,我做的事情根本上是错误的。生产数据库似乎与应用程序完全脱节。我什至没有注意到,因为它不会影响性能。就好像生产数据库中的内容无关紧要。虽然这确实很重要。

下面是我的 database.yml 文件,以防它提供线索。为了全面披露,我不确定这些 ENV 变量中的一些是否存储/存储在哪里,或者如果它们确实存在,在哪里可以找到它们,以及它们应该设置为什么。

感谢您提供的任何指导。

database.yml:

development:

  host: localhost
  adapter: postgresql
  encoding: UTF8
  pool: 5
  username: <%= ENV['USERNAME'] %>
  password: <%= ENV['PASSWORD'] %>
  database: myapp_development

test:
  host: localhost
  adapter: postgresql
  encoding: UTF8
  pool: 5
  username: <%= ENV['USERNAME'] %>
  password: <%= ENV['PASSWORD'] %>
  database: myapp_test

production:
  host: <%= ENV['IP'] %>
  adapter: postgresql
  encoding: UTF8
  pool: 5
  username: <%= ENV['USERNAME'] %>
  password: <%= ENV['PASSWORD'] %>
  database: myapp_production

【问题讨论】:

  • 您最近升级过数据库吗?
  • 我不这么认为。我是不是该?早在问题出现之前,它就一直是同一个 postgres 数据库。
  • 运行 heroku run rake db:migrate:status 会得到什么
  • 嗨@Dinesh,我得到一个包含“状态”、“迁移 ID”和“迁移名称”列的表格。每个状态都是“up”,并且似乎列出了我运行的每个迁移(所有迁移仍然存储在 db/migrate 中)。

标签: ruby-on-rails postgresql activerecord heroku heroku-postgres


【解决方案1】:

从您的帖子中,我认为您是在说您的本地数据库 my_app_production 未与您的 heroku 数据库同步。这永远不会发生。

您应该注意,要登录到 heroku 的 psql 会话,您需要使用以下命令

heroku pg:psql --app <your app_name here>

psql myapp_production 允许您打开与本地数据库的 psql 会话。这不是您的 heroku 生产数据库。

更多关于https://devcenter.heroku.com/articles/heroku-postgresql

【讨论】:

  • 谢谢!我连接到 heroku 数据库,它是最新的,正如预期的那样。那你能帮我理解一下,database.yml中的数据库myapp_production有什么功能吗?似乎我可以在更新heroku数据库时完全绕过myapp_production,无论是通过命令行还是rails迁移。 myapp_production 是否应该列在 database.yml 中?它需要存在吗?这似乎完全是多余的。顺便说一句,我使用的是 Heroku 爱好基础数据库。
  • 再次感谢您的回答。对我之前评论中的问题有什么想法吗?
猜你喜欢
  • 2021-05-17
  • 2014-09-12
  • 2013-01-10
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 2012-10-31
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多