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:ininitialize' /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:inconnect' /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:inblock 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:inrun' /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:inrun_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:inrequire_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 时不能
将 Rails 应用程序推送到 Heroku 时缺少“sqlite3.h”