【问题标题】:How do I enable the asset pipeline in a Rails project I upgraded to 3.1 from an old version?如何在从旧版本升级到 3.1 的 Rails 项目中启用资产管道?
【发布时间】:2012-10-25 20:48:34
【问题描述】:

我认为这与在创建 --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

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

【问题讨论】:

    标签: ruby-on-rails-3.1 asset-pipeline sprockets


    【解决方案1】:

    事实证明:

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

    这个帖子解决了我遇到的一个特殊问题:How to build task '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 实际上允许您在资产模板中使用模型和其他应用程序资源,这可能是一个有用的功能。

    另一个有用的帖子: Upgrading from Rails 3 to Rails 3.1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多