【发布时间】: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