【问题标题】:Cannot migrate on Heroku无法在 Heroku 上迁移
【发布时间】:2015-10-25 04:00:06
【问题描述】:

我想将数据库迁移到 Heroku 上的生产环境。

我输入了以下代码,但出现错误。我不知道该怎么做。我期待着您的建议。谢谢你的好意。

$ heroku run rake db:migrate

Running `rake db:migrate --trace` attached to terminal... up, run.2338
rake aborted!
LoadError: libruby.so.2.2: cannot open shared object file: No such file or directory - /app/vendor/bundle/ruby/2.2.0/gems/pg-0.18.2/lib/pg_ext.so
/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `require'
/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `block in require'
/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:240:in `load_dependency'
/app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `require'
/app/vendor/bundle/ruby/2.2.0/gems/pg-0.18.2/lib/pg.rb:4:in `<top (required)>'
/app/vendor/bundle/ruby/2.2.0/gems/bundler-1.9.7/lib/bundler/runtime.rb:76:in `require'
/app/vendor/bundle/ruby/2.2.0/gems/bundler-1.9.7/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/app/vendor/bundle/ruby/2.2.0/gems/bundler-1.9.7/lib/bundler/runtime.rb:72:in `each'
/app/vendor/bundle/ruby/2.2.0/gems/bundler-1.9.7/lib/bundler/runtime.rb:72:in `block in require'
/app/vendor/bundle/ruby/2.2.0/gems/bundler-1.9.7/lib/bundler/runtime.rb:61:in `each'
/app/vendor/bundle/ruby/2.2.0/gems/bundler-1.9.7/lib/bundler/runtime.rb:61:in `require'
/app/vendor/bundle/ruby/2.2.0/gems/bundler-1.9.7/lib/bundler.rb:134:in `require'
/app/config/application.rb:7:in `<top (required)>'
/app/Rakefile:4:in `require'
/app/Rakefile:4:in `<top (required)>'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/rake_module.rb:28:in `load'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/rake_module.rb:28:in `load_rakefile'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/application.rb:689:in `raw_load_rakefile'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/application.rb:94:in `block in load_rakefile'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/application.rb:93:in `load_rakefile'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/application.rb:77:in `block in run'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/app/bin/rake:8:in `<main>'

【问题讨论】:

标签: ruby-on-rails postgresql heroku migrate


【解决方案1】:

您可以使用heroku run:detached 在后台运行测功机。与 heroku run 不同,这些 dyno 会将其输出发送到您的日志而不是您的控制台窗口。您可以使用 heroku 日志查看这些命令的输出:
$ heroku run:detached rake db:migrate Running rake db:migrate... up, run.2 Use 'heroku logs -p run.2' to view the log output.

【讨论】:

    【解决方案2】:

    您是否尝试过直接从 heroku 服务器中的 bash 运行迁移?如果没有,请尝试以下...

    heroku run bash --app your_app_name_goes_here
    bundle exec rake db:migrate
    

    第一行代码打开 bash 命令终端,第二行像往常一样迁移数据库。


    这不是建议的解决方案。但是,如果您不关心丢失数据库中的数据,您可以先尝试重置数据库,然后再试一次。同样,除非您愿意丢失现有数据,否则不要这样做!

    heroku pg:reset DATABASE
    heroku run rake db:migrate
    

    但是,您可以像以前一样通过 bash 执行此操作。

    希望对你有所帮助。

    【讨论】:

    • 谢谢!我尝试了您的两个建议,但是它返回了相同的错误。 LoadError:libruby.so.2.2:无法打开共享对象文件:没有这样的文件或目录 - /app/vendor/bundle/ruby/2.2.0/gems/pg-0.18.2/lib/pg_ext.so
    • 嗯,这似乎是 Postgres 的问题。尝试运行gem install pg --pre 并重试。这将安装预发布版本。
    • 看来“gem install pg --pre”也不能解决问题。无论如何感谢您的帮助!
    • 啊,读仁太可惜了。希望你能尽快找到解决办法
    • DearTim 我已经解决了这个问题。在 gemfile 中,我将过去版本的 'pg' 设置如下。在此之前我没有设置 'pg' [之前] 组的版本:production do gem 'pg' gem 'rails_12factor' end [After] group :production做 gem 'pg', '0.15.1' gem 'rails_12factor' end
    猜你喜欢
    • 2021-09-25
    • 2015-05-16
    • 2021-08-07
    • 2021-12-14
    • 2021-06-17
    • 2016-02-02
    • 1970-01-01
    • 2021-12-02
    • 2012-04-26
    相关资源
    最近更新 更多