在使用此迁移删除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
答案 0 :(得分:1)
从您的帖子中,我认为您说的是名为my_app_production的本地数据库未与您的heroku数据库同步。这将永远不会发生。
您应该注意,要登录heroku的psql会话,您需要使用以下命令
heroku pg:psql --app <your app_name here>
psql myapp_production 允许您使用本地数据库打开psql会话。它不是您的heroku生产数据库。
的更多信息