6

我不确定是否有现有的方法可以做到这一点,但是使用asset_sync 的想法是资产是从S3 或某些CDN(例如cloudfront)提供的,因此不需要成为应用程序slug 的一部分。是否有可能在 Heroku 上的 .slugignore 中有 /assets 并且仍然可以让 assets:precompile 和 asset_sync 工作?如果我只是将 /assets 放在 .slugignore 中,它们不会与摘要一起编译,并且对资产的引用没有指纹,因此不起作用。

4

3 回答 3

4

编辑 .slugignore 在那里不起作用,因为排除文件在 Heroku 上的所有编译步骤之前开始。但是我们需要编译所有这些,将它们移动到 S3,然后才能删除它们。

我在我的 Rakefile 小脚本中写了一些代码,通过扩展过滤器删除所有不可用的文件:

Rake::Task["assets:precompile"].enhance do
    puts 'my assets:precompile hook is started!'
    dir_path = "#{Dir.pwd}/public/sites-fromfuture-net/"
    records = Dir.glob("#{dir_path}**/*")
    records.each do |f|
        if f =~ /.*.png$/ or
                f =~ /.*.jpg$/ or
                f =~ /.*.eot$/ or
                f =~ /.*.svg$/ or
                f =~ /.*.woff$/ or
                f =~ /.*.ttf$/ or
                f =~ /.*.otf$/ or
                f =~ /.*.css$/ or
                f =~ /.*.js$/ or
                f =~ /.*.wav$/ then
            File.delete(f)
        end
    end
    # puts Dir.glob("#{dir_path}**/*")
    puts 'my assets:precompile hook is finished!'
end

还有一件事:我使用了 heroku-deflater gem,它压缩了所有 css 和 js 资产,所以我通过脚本删除了所有 .css 和 .js 文件,但不删除 .css.gz 和 .js.gz 文件,因为Rails 资产检查。

于 2013-10-25T09:42:51.467 回答
0

你读过这篇文章吗?- https://devcenter.heroku.com/articles/cdn-asset-host-rails31

“同步资产”部分似乎表明资产可以在 heroku 上预编译,然后asset_sync gem 会将它们从那里上传到您的 s3 存储桶(作为预编译步骤的一部分),文章没有提到使用 .slugignore

于 2012-12-22T16:38:58.830 回答
0

检查这个:https ://github.com/VentionCo/heroku-buildpack-post-build-clean

这是一个很好的解决方案:一个支持在构建之后删除文件的构建包(与之前删除文件的 .slugignore 不同)。

我正在使用它来删除node_modulesassets在我的 webpack 构建之后。

于 2021-12-01T17:59:31.657 回答