27

我运行以下命令将本地数据库的内容推送到 Heroku:

heroku db:push --app my-app

在我的家用计算机上,这可以完美运行,但在我的工作计算机上,我收到此错误:

Taps服务器错误:PGError:错误:时区位移超出范围:“2011-11-15 12:00:00.000000+5894114400”

我不确定那个日期是从哪里来的,我在任何地方的数据中都找不到它。任何想法发生了什么和/或如何解决它?

4

11 回答 11

32

使用 Ruby 1.9.2-p290 而不是 1.9.3-p0 为我修复了它。根据 Roger Braun的说法,原因如下:

问题是(我认为),Ruby 1.9.2 和 1.9.3 之间的编组发生了变化,所以这并不是一个真正的点击错误。只需使用 heroku 运行的任何版本来推送和拉取数据库(可能是 1.9.2)。

于 2011-12-12T13:09:17.527 回答
9

从 Ruby 1.9.3 降级到 Ruby 1.9.2 对我来说听起来不是一个吸引人的选择。

Heroku 的开发中心页面实际上建议使用 pgbackups 插件来管理数据库 ( https://devcenter.heroku.com/articles/pgbackups )。听起来可能只是为了将生产数据库备份到本地计算机,但如果您仔细阅读,它们有很大一部分处理“导入数据库”。他们建议您将数据库上传到可公开访问的位置并运行建议的命令

heroku pgbackups:restore DATABASE 'http://s3.amazonaws.com/.....mydb.dump?authparameters'

因此,实际上它们提供了转储本地数据库的命令,建议将其上传到 Heroku 的服务器可以从中获取数据库转储的位置的方法(假设您的本地开发机器不能从 Internet 公开访问),然后使用上述命令它要上传到heroku上的生产环境中。

只是把它放在这里,因为我认为问题已经持续了很长时间,而没有充分解决真正的问题。

于 2012-06-09T22:18:02.537 回答
8

我在 Heroku 上运行 1.9.3p125,在本地机器上运行 1.9.3p125。如果我想在上传时db:push切换到 1.9.2 :

rvm use ruby-1.9.2-p290
heroku db:push --app my-app
rvm use ruby-1.9.3-p125

推送完成后,我切换回 1.9.3。

于 2012-04-12T17:55:56.310 回答
4

使用 1.9.3 或 1.9.2 对我来说都不起作用。

正如 Pablo 指出的那样,问题与日期的编组有关(编组将日期转换为 12:00:00+XXXX”,尽管我的日期类型是“没有时区的时间戳”)。

无论如何,我通过将日期设置为空来解决它,所以我可以成功推送到 Heroku。但是,非常糟糕的解决方案。我希望这个错误会很快得到修复。

于 2012-04-30T13:37:47.373 回答
2

在我选择的平台(gentoo linux)上,Ruby 1.9.2 不再可用。无论如何,可以同时安装一个 ruby​​ 1.8.x 版本。

以下是我解决此问题的方法:

$ eselect ruby list
Available Ruby profiles:
[1]   ruby18 (with Rubygems)
[2]   ruby19 (with Rubygems) *

$ sudo eselect ruby set 1
Password: 
Successfully switched to profile:
ruby18

现在我不得不暂时从我的项目 Gemfile 中评论所有不适用于 ruby​​ 1.8 的 gem(例如回形针)

$ bundle install
& bundle exec heroku db:push

从 Gemfile 取消注释之前的注释

$ sudo eselect ruby set 2
Password: 
Successfully switched to profile:
ruby19

不是一个干净的解决方案,但至少可以正常工作。

于 2012-09-06T09:37:16.793 回答
2

只是更改 ruby​​ 版本对我不起作用。相反,我已将问题缩小到新的 Heroku Toolbelt。

使用较旧的 heroku gem 时,我可以 db:push 就好了。在 heroku 修复它之前,我创建了一个新的 gemset 并安装了 heroku gem。每当我需要执行 db:push 时,我都会切换到这个 gemset。

于 2012-11-08T23:00:27.780 回答
1

你在哪个 Heroku 堆栈上?如果您使用的是bamboo-ree-1.8.7,则正确使用的版本是1.8.7。这是一个编组问题,可以通过在服务器和客户端上使用相同的 Ruby 版本来解决。

于 2012-05-01T19:30:59.913 回答
1

尝试在没有 heroku db:push 的情况下使用本机水龙头。

点击服务器 POSTGRES_DATABASE_REMOTE_URL 登录密码

点击 push sqlite://db/development.sqlite3 login:pass@localhost:5000

为我解决了问题

于 2012-12-29T07:41:47.217 回答
1

它帮助我解决了我的问题,非常实用https://github.com/ricardochimal/taps/issues/92#issuecomment-11996909

于 2013-01-29T10:15:58.987 回答
0

在 win7-x64 上,在 heroku 的 cedar 中创建应用程序并将 pik (rvm-alternative) 设置为使用 ruby​​ 1.9.2 有效。简而言之,我做了什么:

  • 在 cedar 堆栈中创建了一个新的 heroku 应用程序(运行 ruby​​-1.9.2)

    heroku create -s cedar
    
  • 安装 pik (rvm-alternative),然后按照安装后说明进行操作

    gem install pik
    
  • 安装了 ruby​​-1.9.2p290,添加<RUBY192_INSTALL_DIR>/bin$env:PATH

  • 将 DevKit 安装到 ruby​​-1.9.2

  • 确保所有必要的 gem 都安装在 ruby​​ 版本 1.9.3 和 1.9.2 中

    pik gem install <gem-1> <gem-2> ... <gem-n>
    
  • 为生产、开发和测试环境指定的 db gemsGemfile

    # Development + Test:
    group :development, :test do
      gem 'pg', :platforms => :mingw
    end
    
    # Heroku:
    group :production do
      gem 'thin'
      gem 'pg'
    end
    
  • Gemfile.lock在之后删除了对 mingw32 的平台引用

    bundle install
    
  • 在 repo中添加了新的编辑GemfileGemfile.lock(生成)

    git add .
    git commit -am "rebuilt Gemfile for Heroku"
    git push heroku master
    
  • 梳理数据模型,推高本地数据

    heroku run rake db:migrate
    heroku db:push
    heroku open
    
  • 然后切换回 ruby​​-1.9.3

    pik use 193
    
于 2012-06-07T10:39:57.403 回答
0

终于在 Dosha 的回答的帮助下完成了这个工作。(感谢上面的 Hernanvicente 的提示。)

确保您的 ruby​​ 版本与 Heroku 上运行的版本相匹配。似乎 1.9.2 是这些迁移的最稳定版本。

将您的 gemfile 更改为具有以下内容(假设您使用的是 SQLite):

group :development do
 gem 'taps', :require => false
 gem 'sqlite3'
end

这可能仍然无法解决您的问题,因为您的heroku db:push命令使用的是 Heroku 工具栏,而不是旧的、现已弃用的 heroku gem。不幸的是,我们实际上想要较旧的 gem,但是 Heroku 工具栏被heroku. 为了解决这个问题,您需要在您的 ruby​​ 1.9.2 版本上安装 heroku gem,然后通过其特定的文件路径访问它。

所以,接下来的步骤展示了如何让它工作:

在控制台中运行以下命令:

rvm install ruby-1.9.2-p320
rvm use ruby-1.9.2-p320
bundle install`
sudo gem install heroku --no-ri --no-rdoc

然后运行:

rake assets:clean
bundle exec rake assets:precompile

将您的更改提交到 Github。

然后在控制台中输入以下内容:

~/.rvm/gems/ruby-1.9.2-p320/gems/heroku-2.40.0/bin/heroku db:push (使用您自己的文件路径,如果它与此不同。)

于 2013-08-08T13:53:15.947 回答