postgres生产数据库未与heroku app同步

时间:2016-10-01 16:58:25

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

在使用此迁移删除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 app断开连接。

$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

1 个答案:

答案 0 :(得分: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

的更多信息