2013-08-02 42 views
2

我開發了一個Rails 3.2.13應用程序,在我的Windows7機器上開發了PostgreSQL開發數據庫。我能夠成功地將我的應用推向heroku。但是,現在我堅持將現有數據遷移到Heroku的過程中。Rails - 本地機器上的現有開發Postgres數據庫到Heroku

我嘗試過Heroku的documentation,但我似乎無法完成它的工作。

這是我迄今所做的:

  1. 安裝在PG備份Heroku的插件
  2. 創建轉儲文件爲我開發數據庫上傳轉儲文件,AWS S3
  3. 命令 pg_dump -Fc --no-acl --no-owner -h localhost -U user myapp_development > myapp_development.dump

在這一點上,我不知道如何繼續,以恢復轉儲文件,並將其轉換爲Heroku中的生產數據庫。任何人都可以幫忙嗎?

P.S. 我也嘗試了heroku db:push命令,但它給了以下錯誤:

Failed to connect to database: Sequel::AdapterNotFound -> LoadError: cannot load such file -- pg

回答

3

a)在S3上,您需要將轉儲文件設置爲公共可讀。

內S3水桶,用鼠標右鍵單擊您上傳轉儲文件,然後單擊「設爲公開」

現在,當你點擊「屬性」按鈕(右上區域),該文件,你會看到一個'鏈接'值。這意味着該文件現在可以從外部訪問,包括Heroku。

b)你需要這樣運行命令給該PG轉儲恢復到您的Heroku數據庫:

$ heroku pgbackups:restore DATABASE 'http://your.s3.domain.here.s3-us-xxxx-xx.amazonaws.com/myapp_development.dump' --app your-heroku-app-name 

注:

  • 要運行 'Heroku的' 命令需要安裝heroku工具欄。

  • 請注意,步驟(b)中的http URL將與您在上述步驟(a)中的'屬性'中看到的URL相同。

  • DATABASE是此命令的heroku關鍵字,應按原樣鍵入。它等同於DATABASE_URL配置設置你看,當你運行:

$ heroku config --app your-heroku-app-name

1

現在你已經在S3上傳轉儲文件,你需要告訴pgbackups加載了該轉儲。

嘗試這樣:

$ heroku pgbackups:restore DATABASE_URL 'https://s3.amazonaws.com/mybucket/path/to/myapp_development.dump' 

我發現這裏的命令:https://devcenter.heroku.com/articles/heroku-postgres-import-export

編輯:

DATABASE_URL應該逐字工作。但是,如果您想指定數據庫,則可以使用heroku pg:info來查找數據庫的名稱。

對於我來說,heroku pg:info打印:

=== HEROKU_POSTGRESQL_COPPER_URL (DATABASE_URL) 
Plan:  Basic 
Status:  available 
Connections: 1 
PG Version: 9.1.9 
Created:  2013-03-06 17:21 UTC 
Data Size: 9.5 MB 
Tables:  9 
Fork/Follow: Unsupported 

所以,在我的情況,我會用:

$ heroku pgbackups:restore HEROKU_POSTGRESQL_COPPER_URL 'https://s3.amazonaws.com/mybucket/path/to/myapp_development.dump' 
+0

這是我讀同樣的指導,但我不明白的是放什麼在「數據庫」(這是一個),以及我如何獲得S3轉儲文件的路徑(我剛剛註冊了aws,所以請原諒無知) –

+0

OH,它應該可以將'DATABASE_URL'放在「DATABASE」的位置」。但是,您也可以嘗試運行'heroku pg:info'並在頂部使用數據庫名稱。我將編輯答案以包含一個示例。 –

1

確保所有寶石系統上安裝的。

sudo apt-get install sqlite3 libsqlite3-dev 
sudo gem install sqlite3-ruby 

gem install heroku taps sequel 

sudo gem install tabs 

sudo heroku db:push 

OR

sudo heroku db:push –config herokuServerName 

如果仍然問題。使用下面的命令

heroku db:pull postgres://root:@localhost/db_name 

否則

sudo heroku db:pull --confirm herokuDomanName postgres://userName:@localhost/Locadatabase 

根將是數據庫的用戶名和DB_NAME是數據庫名。

好運......... !!

相關問題