Внутренние ресурсы Rails Webpacker не проксируются в action_controller.asset_host

Я использую Rails 5.1 и Webpacker. Все работает нормально. Я использую изображения внутри своих компонентов реакции, которые находятся в / app / javascripts / images, и я отлично импортирую их в свои компоненты, и все хорошо в разработке.

Однако при развертывании внутренние образы теперь обслуживаются непосредственно с URL-адреса моего сайта (с их путями, скомпилированными в веб-пакете, но проблема в том, что я настроил свою производственную среду для использования asset_host, поэтому Rails правильно префикс всех моих других обычных Rails изображения (включая мои пакеты JS с реакцией) - так что все они правильно обслуживаются с моего asset_host.

ТОЛЬКО внутренние изображения, которые находятся в / app / javascripts / images, которые я импортировал в свои компоненты реакции - они НЕ проксируются через asset_host. (он отлично работает в разработке - я там не использую asset_host).

Как я могу сообщить webpacker, что мне нужны изображения, проксируемые через asset_host на продакшене?


person Joerg    schedule 12.01.2018    source источник


Ответы (2)


Мне удалось настроить свой config/webpack/environment.js файл следующим образом:

const { environment } = require('@rails/webpacker')
const env = process.env.NODE_ENV || 'development'
const { resolve } = require('path')
const { safeLoad } = require('js-yaml')
const { readFileSync } = require('fs')
const filePath = resolve('config', 'webpacker.yml')
const appConfig = safeLoad(readFileSync(filePath), 'utf8')[env]
const config = appConfig

const removeOuterSlashes = string =>    
  string.replace(/^\/*/, '').replace(/\/*$/, '')

const formatPublicPath = (host = '', path = '') => {    
  let formattedHost = removeOuterSlashes(host)    
  if (formattedHost && !/^http/i.test(formattedHost)) {   
    formattedHost = `//${formattedHost}`    
  }   
  const formattedPath = removeOuterSlashes(path)    
  return `${formattedHost}/${formattedPath}/`   
}

const fileLoader = environment.loaders.get('file')
fileLoader.use[0].options.publicPath = formatPublicPath(process.env.WEBPACKER_ASSET_HOST, config.public_output_path)

module.exports = environment

Согласно следующему комментарию здесь: https://github.com/rails/webpacker/issues/1186#issuecomment-358110765

person Joerg    schedule 01.02.2018

Вы можете добавить аргумент среды "process.env.WEBPACKER_ASSET_HOST" в /config/webpack/production.js файл.

process.env.NODE_ENV = process.env.NODE_ENV || 'production'

process.env.WEBPACKER_ASSET_HOST = process.env.WEBPACKER_ASSET_HOST || '/yourpath/'

const environment = require('./environment')

module.exports = environment.toWebpackConfig()

Я работаю в рельсах6. надеюсь, это может кому-то помочь

person Lorenzo    schedule 05.03.2020