2013-01-21 97 views
1

我最近遇到了一個問題在處理Heroku的PostgreSQL數據庫的處理。的Heroku]與數據庫

我想更新某個用戶的屬性(讓他的管理員),所以我把數據庫從Heroku的本地更新自己的屬性,並再次推。

heroku db:pull 
UPDATE users SET user_type = 'admin' WHERE name = 'thisuser'; //in postgres 
heroku db:push 

然後,發生下面的問題。

!!! Caught Server Exception 
HTTP CODE: 500 
Taps Server Error: PGError: ERROR: time zone displacement out of range: "2013-01-21 12:00:00.000000+5895153600" 
LINE 1: ....facebook.com/thisuser', 'facebook', '2374538475', '2013-01-2... 

因此,我再次運行以下命令以從錯誤中恢復。

heroku db:pull 
heroku db:push 

而這導致從生產和開發中抹去了我的整個數據庫。 我有兩個問題要問。

  1. 在Heroku環境中更新某個用戶屬性的正確方法是什麼?拉整個數據庫只是爲了更新一個小對象的一個​​屬性似乎有點過分。
  2. 爲什麼我的行爲導致消滅一切從DB?

謝謝你的幫忙。我非常感激。

+1

你可以在你的生產數據庫使用PSQL沒有複製整個事情 - https://devcenter.heroku.com/articles/heroku-postgresql#using-the-cli'Heroku的PG:psql' - 每當你嘗試的任何數據更新到生產系統 - 始終先備份 - https://devcenter.heroku.com/articles/pgbackups – house9

回答

1

對於您的命令,我建議你做這樣的小東東in a console

$ heroku run rails console 

您可以鍵入一次性的命令,就像你在本地機器上。

關於不穩定:顯然這是與Heroku的一個bug關於Ruby 1.9.3。在1.9.2上,你不會遇到問題。所以如果你使用rbenv或者rvm,你可以在執行heroku之前切換紅寶石。你甚至可能會想要寫一個小的shell腳本如:

#!/bin/sh 
#safe_heroku.sh 
HEROKU_CMD=/usr/local/heroku/bin/heroku # Check which heroku 
RBENV_CMD=/usr/bin/rbenv     # Check which rbenv 
SAFE_RUBY_VERION=1.9.2     # Check rbenv versions 

$RBENV_CMD shell $SAFE_RUBY_VERSION 
$HEROKU_CMD "[email protected]" 

用法:

$ safe_heroku rake db:push # Or whatever command you want to run... 
0

我同意上面,但是我嘗試使用紅寶石安全地做到這一點,我需要例如任何更改答案給角色添加到用戶,我會做:

$ heroku run console 
user = User.find(1) 
Role = Role.find(1) 
user.roles << role 

或在您的情況

user = User.find_by_name('user name') 
user.user_type = 'admin' 
user.save! 

更安全的使用你的測試代碼進行更新,而不是黑客的數據庫。