0

我认为这与在创建的项目中启用资产管道相同--skip-sprockets- 我可能弄错了。

我正在尝试运行rake assets:precompile测试,现在,因为我已经添加require 'sprockets/railtie'到我的 config/application.rb - 它至少找到了任务 - 但它说:

no such table: app_configs

更新:我发现这个错误来自我们应用程序中一个名为 AppConfig 的模型——所以我正在研究这部分。我不知道为什么它只发生在运行这个 rake 任务时......

更新:似乎这个特殊的 rake 任务假设我在生产环境中,即使我在我的开发环境中。其他 rake 任务似乎没有这个问题... ? 它表明它实际运行的任务是:/home/.../bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUP=assets

所以它没有找到表是有道理的,因为它正在查找错误的数据库(可能甚至不存在的数据库)。但是它是如何(错误地)确定它在生产环境中的呢?

4

1 回答 1

1

事实证明:

我确实几乎正确地设置了资产管道:您所要做的就是运行rake rails:update以确保您的项目文件全部更新以与您当前的 Rails gem (3.1.x) 兼容。它会在覆盖文件时警告您,您可以查看更改并自己编辑文件(遗憾的是没有合并选项)。这些更改包括特定于资产管道(在config目录中)的几个配置指令。

这篇文章解决了我遇到的一个特殊问题:如何构建任务'assets:precompile' -(我不需要rails/all,所以我必须添加链轮需要)

做完这一切后,我遇到了生产环境问题。assets:precompile 任务有意使用生产环境,以便生成可用于生产的资产;如果您使用开发环境,它会根据配置编译资产,environments/development.rb其中通常不包含摘要 URL。所以这是故意的 - 那么问题是当它初始化生产环境时,它试图访问一个在开发环境中不存在的数据库。解决这个问题的方法(出于测试目的)是将其添加到您的config/application.rb文件中:

config.assets.initialize_on_precompile = false

这可以防止它初始化应用程序,,在资产预编译期间不再出现初始化错误:) 但是:没有理由将此设置为 false,除非您出于某种原因打算在非生产环境中预编译所有资产(像 Heroku 一样)而不是允许 Capistrano 或其他一些部署工具在部署应用程序时在生产中编译它们。initialize_on_precompile 实际上允许您在资产模板中使用模型和其他应用程序资源,这可能是一个有用的功能。

另一个有用的帖子: 从 Rails 3 升级到 Rails 3.1

于 2012-10-26T16:35:27.390 回答