【发布时间】: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