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
我在使用此迁移删除 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