postgres 生产数据库未与 heroku 应用程序同步

postgres production database isn't synced with heroku app

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

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

bundle exec rake db:migrate 似乎成功删除了 table;它在 rake db:schema:dump 之后从架构中消失;并且记录似乎不再通过 heroku 控制台存在。但是,table 仍然存在于我的 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 数据库似乎与我的实时 heroku 应用程序断开连接。

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

我在直播网站上查看食物数量时,是6161。

很明显,我做错了根本性的事情。生产数据库似乎与应用程序完全断开连接。我什至没有注意到,因为它不影响性能。生产数据库中的内容似乎无关紧要。虽然这确实很重要。

下面是我的 database.yml 文件,以防它提供线索。为了全面披露,我不确定 if/where 这些 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

从您的 post 来看,我想您是在说名为 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