Rails 4.1.4 在推送到 Heroku 时尝试连接到未初始化的 Mongo 数据库(rake assets:precompile)

Posted

技术标签:

【中文标题】Rails 4.1.4 在推送到 Heroku 时尝试连接到未初始化的 Mongo 数据库(rake assets:precompile)【英文标题】:Rails 4.1.4 tries to connect to uninitialized Mongo database when pushing to Heroku (rake assets:precompile) 【发布时间】:2014-11-06 18:33:19 【问题描述】:

我知道还有一些与此问题相关的其他问题,但我还没有找到答案。

我正在使用 Rails 4.1.4 构建应用程序。我使用 MongoDB 作为我的数据库,使用 Mongoid 4.0.0 作为 ODM。

当我将我的应用推送到 Heroku 时,运行 rake assets:precompile 时构建失败,因为 Rails 尝试连接到生产数据库,此时未初始化,默认连接开发数据库,​​生产中不存在。这是我得到的错误:

为 Rails 资产管道准备应用 运行:耙资产:预编译 耙中止! Mongo::ConnectionFailure: 无法连接到 localhost:27017 的主节点 /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/mongo-1.10.2/lib/mongo/mongo_client.rb:422:in connect' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/mongo-1.10.2/lib/mongo/mongo_client.rb:661:in setup' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/mongo-1.10.2/lib/mongo/mongo_client.rb:177:in initialize' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/mongo_mapper-0.13.0/lib/mongo_mapper/connection.rb:88:in new' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/mongo_mapper-0.13.0/lib/mongo_mapper/connection.rb:88:in connect' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/mongo_mapper-0.13.0/lib/mongo_mapper/connection.rb:98:in setup' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/mongo_mapper-0.13.0/lib/mongo_mapper/railtie.rb:48:in block in <class:Railtie>' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/railties-4.1.4/lib/rails/initializable.rb:30:in instance_exec' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/railties-4.1.4/lib/rails/initializable.rb:30:in run' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/railties-4.1.4/lib/rails/initializable.rb:55:in block in run_initializers' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/railties-4.1.4/lib/rails/initializable.rb:54:in run_initializers' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/railties-4.1.4/lib/rails/application.rb:300:in initialize! /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/config/environment.rb:5:in <top (required)>' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/railties-4.1.4/lib/rails/application.rb:276:in require' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/railties-4.1.4/lib/rails/application.rb:276:in require_environment!' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/railties-4.1.4/lib/rails/application.rb:379:in block 在 run_tasks_blocks' /tmp/build_f8b818f9-3058-4ea1-807e-158e2964efcd/vendor/bundle/ruby/2.0.0/gems/sprockets-rails-2.1.4/lib/sprockets/rails/task.rb:64:in `定义中的块(2级)' 任务:TOP => 环境 (通过使用 --trace 运行任务查看完整跟踪)! !预编译资产失败。 !

! Push 被拒绝,无法编译 Ruby 应用

有人知道这个问题的解决方法吗?我如何告诉 Rails 在生产环境中预编译资产时不要连接到数据库?

提前感谢您的帮助!

最好的,

【问题讨论】:

【参考方案1】:

问题已解决Rails 4.1.4 对我所说的没有问题。我做错了什么,我的错!。

问候,

【讨论】:

【参考方案2】:

您可能想尝试启用实验室功能以使环境在预编译时可用:

heroku labs:enable user-env-compile

其他 seem to be having success 在类似情况下这样做。

【讨论】:

Heroku 中不再提供该功能。 Heroku 现在默认启用它。所以这个修复对我不起作用。无论如何,谢谢!。

以上是关于Rails 4.1.4 在推送到 Heroku 时尝试连接到未初始化的 Mongo 数据库(rake assets:precompile)的主要内容,如果未能解决你的问题,请参考以下文章

防止 Django SQLite db 在推送到 Heroku 时被覆盖

Heroku(Cedar) + Node + Express + Jade 子目录中的客户端 javascript 文件在本地与 foreman+curl 一起工作,但在推送到 Heroku 时不能

推送到Heroku时Ruby on Rails错误

将 Rails 应用程序推送到 Heroku 时缺少“sqlite3.h”

安装sqlite3时发生将rails应用程序推送到Heroku错误,并且Bundler无法继续[重复]

将 Rails 应用程序推送到 Heroku 时出现啥错误