我正在尝试将我的应用程序从我的开发环境中推送到 heroku 上的生产环境。我使用
git push heroku master
现在我需要推送我的数据库,我正在尝试这个
heroku db:push
但它失败了,我在控制台收到此消息。
ruby-1.9.3-p194@app0907api @~/Documents/myapp06
>heroku db:push
/Users/hj/.rvm/gems/ruby-1.9.3-p194@app0907api/gems/sqlite3-1.3.6/lib/sqlite3/sqlite3_native.bundle: [BUG] Segmentation fault
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
这有点奇怪,因为我的应用程序使用 postgres 进行开发、生产和测试,我根本没有使用 sqlite,也没有为 sqlite3 安装任何 gems
可能出现什么问题?
source 'https://rubygems.org/'
gem 'rails', '3.2.8'
gem 'rails-api'
gem 'pg'
gem 'taps'
gem 'thin'
gem 'foreman'
gem 'rabl'
gem 'paperclip', '~>3.2.0'
gem 'aws-sdk', '~>1.3.4'
group :development do
gem 'annotate', ">=2.5.0"
gem 'debugger'
end
找到的解决方案:
在我的终端控制台上键入以下行:
gem install heroku
sudo gem install taps
这允许我运行命令:
heroku db:push
。但是现在,在发送数据库时,我收到此错误:
Saving session to push_201209202159.dat..
!!! Caught Server Exception
HTTP CODE: 500
Taps Server Error: PGError: ERROR: time zone displacement out of range: "2012-09-18 12:00:00.000000+5894853600"
LINE 1: ...ated_at") VALUES (45, '37.785834', '-122.406417', '2012-09-1...
更新:导入/导出 PG 数据的功能现在是 CLI 的一部分,如 heroku pg:push 和 heroku pg:pull
我强烈建议使用 Heroku CLI 的 pg:transfer 插件。您可以使用该插件做很多事情,包括将数据从本地环境传输到 Heroku 环境。
db:push
和db:pull
对于在两个 postgres 数据库之间传输非常脆弱。 要从本地传输到远程,请执行以下操作以安装插件并传输数据:
$ heroku plugins:install https://github.com/ddollar/heroku-pg-transfer
$ heroku pg:transfer --from $DATABASE_URL --to HEROKU_POSTGRESQL_JADE_URL
--from $DATABASE_URL
标志表示从 env 变量中提取DATABASE_URL
作为本地数据库位置,并推送到 Heroku 应用程序的HEROKU_POSTGRESQL_JADE_URL
数据库。您可以使用以下方法找到您的 Heroku 数据库名称heroku config
:
$ heroku config | grep POSTGRES
HEROKU_POSTGRESQL_JADE_URL: postgres://ads8a8d9asd:al82kdau78kja@ec2-23-23-237-0.compute-1.amazonaws.com:5432/resource123
您可能错过了一些步骤。
-
bundle install
-
git add .
-
git commit -m 'your commit message goes here'
-
git push heroku
-
heroku run rake db:migrate
也:
-
sudo gem install heroku
-
sudo gem install taps
编辑:
要解决休息问题:
$ rvm install ruby-1.9.2-p318
$ rvm use ruby-1.9.2-p318
$ heroku db:push