Rails.application.assets 在生产环境中的等价物是什么?

sam*_*mms 4 ruby-on-rails sass

我正在使用 Sass::Engine 动态编译 css 文件,我需要将环境和加载路径传递给链轮。这在开发中工作得很好:

def compile_scss
  view_context = ActionView::Base.new
  environment = Rails.application.assets

  # body and filename are instance variables created elsewhere        
  @compiled_file = Sass::Engine.new(body,
                                    filename: filename,
                                    syntax: :scss,
                                    cache: false,
                                    load_paths: environment.paths,
                                    sprockets: {
                                      context: view_context,
                                      environment: environment
                                    }).render
end
Run Code Online (Sandbox Code Playgroud)

但在生产中失败,因为Rails.application.assetsnil。生产中的等价物是什么?

sam*_*mms 6

Rails.application.assets 总是nil在生产中,因为资产是预编译的,并从公共文件夹提供(感谢@bkunzi01)。此外,Sprockets 只需要传递给它的资产路径即可运行,而不是环境。路径可从Rails.application.config.assets.paths. 我能够使用以下方法让我的样式表编译器工作。

def compile_scss
  view_context = ActionView::Base.new
  environment = Rails.application.assets || Rails.application.config.assets

  # body and filename are instance variables created elsewhere        
  @compiled_file = Sass::Engine.new(body,
                                    filename: filename,
                                    syntax: :scss,
                                    cache: false,
                                    load_paths: environment.paths,
                                    sprockets: {
                                      context: view_context,
                                    }).render
end
Run Code Online (Sandbox Code Playgroud)