【问题标题】:Heroku] Dealing with databaseHeroku] 处理数据库
【发布时间】:2013-01-21 02:46:12
【问题描述】:

我最近在处理heroku postgresql 数据库时遇到了一个问题。

我想更新某个用户的属性(让他成为管理员),所以我从 heroku 中拉出 db 以在本地更新他的属性并再次推送。

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. 为什么我的行为会导致数据库中的所有内容都被清除?

感谢您的帮助。非常感谢。

【问题讨论】:

标签: ruby-on-rails database postgresql heroku


【解决方案1】:

对于你的命令,我建议你做这种小东西in a console

$ heroku run rails console

您可以像在本地计算机上一样键入一次性命令。

关于不稳定性:显然这是在 Ruby 1.9.3 上使用 Heroku 的 bug。在 1.9.2 上,您不会遇到问题。所以如果你使用 rbenv 或 rvm,你可以在执行 heroku 之前切换 rubies。您甚至可能想编写一个小 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 "$@"

用法:

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

【讨论】:

    【解决方案2】:

    我同意上面的答案,但是我尝试使用 ruby​​ 安全地进行我需要的任何更改,例如为我要执行的用户添加角色:

    $ 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!
    

    使用经过测试的代码进行更新而不是破解数据库更安全。

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2017-01-30
      相关资源
      最近更新 更多