【问题标题】:Error when pushing data to Heroku: time zone displacement out of range将数据推送到 Heroku 时出错:时区位移超出范围
【发布时间】:2011-12-30 09:30:20
【问题描述】:

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

heroku db:push --app my-app

在我的家用电脑上可以完美运行,但在我的工作电脑上却出现此错误:

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

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

【问题讨论】:

  • 我看到了使用 1.9.2-p290 而不是 1.9.3-p0 的建议(如果您正在使用它)here 但这对我没有帮助。我在两个版本中都遇到了同样的问题。
  • @ie 它确实对我有用(实际上是我提出的建议)。
  • This post 建议使用 pgbackups 来移动您的数据。

标签: postgresql heroku taps


【解决方案1】:

终于在 Dosha 的回答 here 的帮助下完成了这项工作。 (感谢上面的 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 (如果与此不同,请使用您自己的文件路径。)

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

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

      点击服务器 POSTGRES_DATABASE_REMOTE_URL 登录密码

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

      帮我解决了问题

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 您使用的是什么“旧”版本的 Heroku gem?我尝试了各种不同的版本,但仍然遇到同样的问题。
        【解决方案5】:

        在我选择的平台(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
        

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

        【讨论】:

          【解决方案6】:

          从 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上的生产环境中。

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

          【讨论】:

          • 这对我有用。无论如何,我不必修改我的 ruby​​ 版本或破解数据库。谢谢,阿迪亚!
          • 这对于在本地开发环境中也使用 postgresql 数据库的人来说非常有效。
          【解决方案7】:

          在 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>
            
          • Gemfile中的生产、开发和测试环境指定的db gems

            # 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
            
          • GemfileGemfile.lock 中添加了新的编辑(生成)到 repo

            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
            

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

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

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

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

              【讨论】:

              • 我已经尝试了 1.9.2 和 1.9.3 - 都不是问题。取下工具带 - 问题解决了!在此处讨论删除工具带:johntwang.com/blog/2011/09/13/remove-heroku-toolkit 然后重新安装 heroku gem!
              • @Diego Pino:你是如何将日期设置为空的?
              • @CodeBiker 我记不太清了,但很可能是打开 PostgreSQL 会话并使用 SQL 将日期设置为空。对 Heroku 的推动。
              【解决方案10】:

              我在 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。

              【讨论】:

                【解决方案11】:

                使用 Ruby 1.9.2-p290 而不是 1.9.3-p0 为我修复了它。 According to Roger Braun,就是这个原因:

                问题是(我认为),Ruby 1.9.2 之间的编组发生了变化 和 1.9.3,所以这不是真正的水龙头错误。随便用 heroku 运行以推送和拉取数据库的版本(可能是 1.9.2)。

                【讨论】:

                • 我在本地机器上遇到了 1.9.3p125,在我的 heroku 实例上遇到了 1.9.3p125——尽管我不能确定 taps 确实在运行我的实例。
                • taps 无法在您的实例上运行 - 它有自己的实例,因此您的 ruby​​ 版本不适用于它。
                • 我强烈建议大家使用下面 Aditya 所描述的 heroku 的 pgbackups(devcenter.heroku.com/articles/pgbackups) 解决方案
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-03-10
                • 1970-01-01
                • 2013-01-07
                • 1970-01-01
                • 2018-07-18
                • 2013-01-07
                • 1970-01-01
                相关资源
                最近更新 更多