0

我首先注意到的麻煩後,我用這種遷移投下了活動記錄表同步:Postgres的生產數據庫沒有與Heroku的應用

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數據庫似乎從我的生活斷開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 
+0

你最近是否升級了你的數據庫? – dnsh

+0

我不這麼認爲。我是不是該?自問題出現以來,它一直是同一個postgres數據庫。 –

+0

當你運行時,你會得到什麼** heroku運行rake db:migrate:status ** – dnsh

回答

1
從您的文章

好吧,我想你是說,你的本地數據庫名爲my_app_production沒有與Heroku的數據庫同步。這絕不會發生。

你應該注意到,登錄使用psql的Heroku的會議,你需要使用下面的命令

heroku pg:psql --app <your app_name here> 

PSQL myapp_production讓您與您的本地數據庫打開PSQL會議。這不是你的英雄生產數據庫。

更多文章https://devcenter.heroku.com/articles/heroku-postgresql

+0

謝謝!我連接到了heroku數據庫,並且正如預期的那樣它是最新的。那麼你能幫我理解嗎,database.yml中的數據庫myapp_production是否有任何功能?看起來我可以在更新heroku數據庫時完全繞過myapp_production,無論是通過命令行還是通過rails遷移。 myapp_production應該在database.yml中列出嗎?它是否需要存在?這看起來完全是多餘的。順便說一下,我正在使用一個heroku愛好基礎數據庫。 –

+0

再次感謝您的回答。對我之前評論中的問題有任何想法? –

相關問題