【发布时间】:2011-11-17 20:05:56
【问题描述】:
我正在将 Rails 3.1 应用程序部署到 Heroku 的 Cedar 堆栈。使用Heroku Cedar and Rails 3.1,您可以自己在本地编译资产,让 Heroku 在您推送时编译它们(在“slug 编译”期间),或者让它们在应用程序运行时即时编译。我想做中间选项,让 Heroku 预编译资产。
当 Heroku 运行 assets:precompile 任务时,它会出现 "could not connect to server" 错误,因为应用程序正在尝试连接到数据库,但在 slug 编译的那个阶段没有可用的数据库。在这一点上,缺少数据库连接是意料之中的,也是不可避免的。我正在寻找一种绕过它的方法,因为数据库连接对于资产预编译并不重要。
我的应用程序中尝试连接到数据库的部分是 Devise。 routes.rb 中有一个devise_for :users 行,它想查看 User 模型。
我可以只写一个 rake 任务来存根 devise_for 并将其作为 assets:precompile 的先决条件。我认为这可以解决我的问题,但是我正在寻找一个更通用的解决方案,我可以在 任何 Rails 3.1 应用程序上使用该解决方案来解决 Heroku 上的这个问题。
那里有什么东西吗,或者你能想出什么东西可以消除数据库连接错误,同时仍然运行应用程序足以生成路由和资产路径?
很明显,如果一个应用程序需要在启动期间读取/写入数据,我们不能存根,但我们可以自动伪造每个 ActiveRecord 模型吗?
【问题讨论】:
标签: ruby-on-rails database heroku asset-pipeline