использование ApplicationController.render в граблях - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь сгенерировать несколько статических HTML-страниц с ошибками, используя мой макет.Мне удалось пройти большую часть пути, но я столкнулся с ошибкой: У меня нет доступа к ActionView::Helpers::AssetTagHelper методам .

Это может быть из-за того, гдеЯ связываю эту задачу с граблями. Вот как все это работает.Я добавил HTML в качестве ресурса:

Rails.application.config.assets.paths << Rails.root.join('app', 'assets', 'html')
Rails.application.config.assets.precompile << '*.html'
Rails.application.config.assets.register_mime_type('text/html', '.html')

Затем создал задачу rake, которая связывается с assets:precompile:

Rake::Task['assets:precompile'].enhance do
  Rake::Task['my_app:create_non_digest_assets'].invoke
end

namespace(:my_app) do
  logger = Logger.new($stderr)

  task(create_non_digest_assets: :'assets:environment') do
    manifest_file = File.new(Dir.glob(File.join(Rails.root, 'public/**/assets/.sprockets-manifest-*.json')).first)
    asset_dir = File.dirname(manifest_file)
    whitelisted_assets = []

    whitelisted_assets.concat(Rails.config.non_digest_assets) rescue nil

    JSON.load(manifest_file)['assets'].each do |asset, digested_asset|
      if whitelisted_assets.any? { |pattern| File.fnmatch?(pattern, asset) }
        logger.info("(My APP) creating #{asset} symlink for #{digested_asset}")

        FileUtils.ln_s(
          File.join(asset_dir, digested_asset),
          File.join(asset_dir, asset),
          { force: true }
        )
      end
    end
  end
end

И добавил этот бит конфигурации, чтобы он знал, какие активычтобы создать непереваренные ссылки, а также препроцессор Sprocket для запуска ApplicationController.render:

Rails.application.config.non_digest_assets = %w(*.html)

Sprockets.register_preprocessor 'text/html', -> (asset) do
  asset[:data] = ::ApplicationController.render({
    inline: asset[:data],
    layout: 'layouts/application1'
  })
end

Я предполагаю, что помощники тега актива могут не работать, потому что я пытаюсь их использоватьв препроцессоре как часть задачи assets:precompile.Есть еще какие-нибудь мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...