【问题标题】:Unexpected Behavior of 'config.assets.prefix' in Rails 4Rails 4 中“config.assets.prefix”的意外行为
【发布时间】:2014-01-23 11:49:03
【问题描述】:

我在config/environments/development.rb中设置了如下配置变量:

config.assets.prefix = "/dev-assets"

在 Rails 3 中,这意味着在开发中,我的应用程序将在 public/dev-assets 中查找资产,而不是 public/assets,以避免加载可能存在的预编译资产的风险。

但在 Rails 4 中,设置此参数并运行 rake assets:precompile 现在会将预编译资产添加到 public/dev-assets

这个前缀似乎被用于 Rails 放置预编译资产的地方和 Rails 查找资产的地方。这意味着 Rails 将始终从放置预编译资产的同一位置提取资产,这意味着可能陈旧的预编译资产会掩盖最新的资产。

那么我如何在 Rails 4 中实现同样的功能呢?我如何将我的资产预编译到不同于 rails 在其中查找资产的目录?

rake assets:precompile 的控制台输出:

[2014-01-23T11:48:35.766582 #4234] INFO -- : Writing /path/to/app/public/dev-assets/application-1b403217ee27653d8d1299aeb242462b.js I, [2014-01-23T11:48:35.819090 #4234] INFO -- : Writing /path/to/app/public/dev-assets/application-8e258453df56d80e1a8b9b8a8e6f8db4.css

【问题讨论】:

  • 你在哪个环境配置文件中写了config.assets.prefix = "/dev-assets"
  • @dax config/environments/development.rb(添加到问题中)。
  • 你想要的行为是什么?如果您在开发环境中运行assets:precompile,这不是预期的行为吗?
  • @dax 在 Rails 3 中,将 config.assets.prefix 设置为 /assets 以外的值(例如 /dev-assets,这意味着虽然 rails 仍将资产预编译为 public/assets,但它试图在开发模式下从public/dev-assets 拉取资产,确保加载的资产始终是新鲜的,而不是(可能过时的)预编译资产。
  • 您的资产属于app/assets/**/*,编译后它们将转到/public/ + 任何您使用config.assets.prefix 指定的位置。我很难理解你的问题。您是否正在为开发中的编译资产提供服务?显然,rails 在您将它们编译到的地方寻找已编译的资产......

标签: ruby-on-rails ruby ruby-on-rails-4 asset-pipeline


【解决方案1】:

我应该一直在使用RAILS_ENV=production rake assets:precompile,以便在生产环境中将资产(config.assets.prefix 仍为默认值)预编译为本地public/assets

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 2016-08-23
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多