为什么Asset Pipeline会重新编译已编译的资产,从而创建冗余的嵌套路径?

时间:2013-01-24 17:16:45

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

当我将我的应用程序部署到生产环境(使用capistrano)时,我在资产预编译期间遇到错误:

  * executing `deploy:assets:precompile'
  * executing "cd /home/ubuntu/projects/Marketplace-web/releases/20130124162353 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
    servers: ["server_name"]
    [server_name] executing command
*** [err :: server_name] rake aborted!
*** [err :: server_name] File name too long - /home/ubuntu/projects/Marketplace-web/releases/20130124162353/public/assets/assets/assets/assets/assets/assets/assets/assets/assets/assets/assets/assets/assets/widgets/jquery.jcarousel-d505e569ed1040e0b45bc33e0e49f117.js-26b4b41e4a45cb353ba7e39510893ace-93b194138c96579222ca08f9651946a7-43eca25d0cc511b37176bc58d8575e1a-1b97916c47bfa22545013b3751cb59e4-d9043106773924d12596e08b349f00dc-b7b7aa9bf440ca19896b1103d7651728-c40c1f2b8b11e6de163fefea9db6778c.gz+

我在http://railscasts.com/episodes/335-deploying-to-a-vps?view=comments上找到了评论,说这个问题可以通过从我的config / application.rb中删除来解决:

config.assets.paths << "#{Rails.root}/public"

我删除了它,并且任务停止在public / assets文件夹中重新编译我预先编译的静态资产,但我的问题是:为什么它首先要这样做?是不是该配置行旨在告诉Rails在哪里找到我的其他未编译的静态资产?为什么要尝试在config.assets.paths数组中编译资产?我不需要那条线,所以Rails知道在哪里可以找到我的静态资产吗?

我做错了吗?我应该在哪里放置我的非编译的静态资产,我应该如何告诉Rails在哪里找到它们?

1 个答案:

答案 0 :(得分:0)

检查Rails Assets Configuration Documentation

  • config.assets.paths包含用于查找资产的路径。添加此配置选项的路径将导致这些路径用于搜索资产。

不要将输出目录添加到输入目录的数组中。否则,先前资产编译运行的输出将作为另一个输入包含在下一个资产编译运行中。

您的可编辑资产通常应在app/assets(如果您编写)或vendor/assets(如果您没有)。为什么不将jquery.carousel.js放入vendor/assets/javascripts/