【问题标题】:Is it possible in Rails to have different assets directories for different environments?Rails 是否可以为不同的环境提供不同的资产目录?
【发布时间】:2015-10-29 11:00:39
【问题描述】:

在执行资产预编译 (rake assets:precompile) 之前,我想将 gulp 任务应用到我位于此处的 JavaScript 文件:

app/assets/javascripts/my_angular/directives/*.js
app/assets/javascripts/my_angular/controllers/*.js

所以当我稍后运行 rake assets:precompile 时,它会选择已经处理过的 gulp 文件。

但对我来说,问题是我不想简单地用其 gulp 输出文件覆盖现有的 JS 文件,因为我仍然需要原始的、未触及的文件来进行舒适的开发。

我想我需要有两个文件夹:

1) development_assets

2) production_assets(带有gulp 输出的自动生成的文件夹)

是否可以在 Rails 中为不同的环境提供不同的资产目录?(开发、生产)。如果是 - 如何配置?

也许我的问题有另一种解决方案?没有两个单独的目录...我愿意接受建议。

【问题讨论】:

    标签: ruby-on-rails angularjs ruby-on-rails-4 gulp


    【解决方案1】:

    您可以将configure the assets pathconfig.assets.prefix = '/gulped-assets' 联系起来。如果您在config/environments/production.rb 中执行此操作,它将适用于生产但不适用于开发,让您仍然可以在开发中使用您的原始文件。您需要确保您的部署过程在资产编译之前运行 Gulp,或者在本地运行 Gulp 并将 /gulped-assets 包含在您的存储库中。


    您也可以add a preprocessor 到资产管道,这样您只需要一个/assets 目录。你可以通过指定一个文件扩展名和一个处理程序来做到这一点,然后将扩展名添加到你想要以这种方式处理的所有文件中,就像你对.sass.erb 等所做的那样。从 Rails 的例子中可以看出,它看起来像这样:

    module BangBang
      class Template < ::Tilt::Template
        def prepare
          # Do any initialization here
        end
    
        # Adds a "!" to original template.
        def evaluate(scope, locals, &block)
          "#{data}!"
        end
      end
    end
    
    # config/initializers/bang.rb
    Sprockets.register_engine '.bang', BangBang::Template
    

    然后在扩展名中包含.bang 的任何文件都将附加一个!。那里已经支持许多不同的任务,所以也许你可以避免使用 Gulp 来支持仅 Sprockets 的管道。根据您的 Gulp 任务,您甚至可以通过它们运行 data 以构建混合管道。


    或者,您可以换个方向,将 Sprockets 替换为 Gulp-only 管道。有很多人这样做,而我在这里写的任何内容都会很长,而且只会重复他们的工作,所以请查看gulp-rails-pipeline gem,也许从另一个角度阅读Gulp - a modern approach to asset pipeline for Rails developers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-03
      • 2013-07-28
      • 2012-01-04
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      相关资源
      最近更新 更多