Rails引擎声明不是预编译的

时间:2016-03-14 14:56:50

标签: ruby-on-rails assets production precompiled

我正在研究导轨并使用带导轨的发动机。 在生产模式下,rails没有加载引擎的编译资产, 虽然我执行了:

$ RAILS_ENV=production bundle exec rake assets:clean assets:precompile

如果有人知道这个问题,请帮忙。

我的设置如下:

环境/ production.rb

config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_files = false 
config.assets.compile = false 
config.assets.digest = true
config.log_level = :debug
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new`

发动机/ XXX / LIB / XXX / engine.rb

引擎的选项是 - 可安装

 module Moderna  
  class Engine < ::Rails::Engine  
    isolate_namespace xxx

    # parent company asset precompile
    initializer "xxx.assets.precompile" do |app|

      app.config.assets.paths << Rails.root.join("app", "assets", "fonts")

      app.config.assets.precompile << %w(
        xxx/*.css xxx/fancybox/*.css xxx/skin/*.css xxx/google-code-prettify/*.css
        xxx/*.js xxx/flexslider/*.js xxx/google-code-prettify/*.js
        xxx/portfolio/*.js xxx/quicksand/*.js
        xxx/*.svg xxx/*.eot xxx/*.woff xxx/*.ttf
        xxx/customicon/*.svg xxx/customicon/*.eot xxx/customicon/*.woff xxx/customicon/*.ttf
      )

      app.config.assets.precompile << /\.(?:svg|eot|woff|ttf)\z/
    end
  end
end

3 个答案:

答案 0 :(得分:2)

我遇到了与Rails 4引擎相同的问题,我通过向engine.rb添加以下代码解决了这个问题

Rails.application.config.assets.precompile += ['*.js', '*.css', '**/*.js', '**/*.css', '*.jpg',
                                '*.png', '*.ico', '*.gif', '*.woff2', '*.eot',
                                '*.woff', '*.ttf', '*.svg'] 

我需要预先编译所有资产,以便使用通配符。您可以指定文件。

您可以在主机应用程序上指定第二个选项 的配置/ assets.rb

Rails.application.config.assets.precompile += %w( engine_name/file_name )

答案 1 :(得分:2)

rails engine getting started guide建议在您的engine.rb

中包含以下内容
initializer "engine_name.assets.precompile" do |app|
  app.config.assets.precompile += %w( admin.js admin.css )
end

它对我有用。

答案 2 :(得分:0)

EDIT 刚刚意识到这个问题有点老了。如果您将 app/assets/config/my_component_manifest.js 文件添加到引擎,然后使用它来指定资产入口点,以下内容将适用于您。

您也可以将其放入 engine.rb 文件中:

module MyComponent
  class Engine < ::Rails::Engine
    config.assets.precompile += %w( my_component_manifest.js )
  end
end