Проблемы с программным доступом к URL-адресу изображения в приложении React при размещении серверной части на Heroku

#reactjs #heroku

#reactjs #heroku

Вопрос:

У меня есть простое приложение для чата и рисования, использующее websockets в React с серверной частью Ruby on Rails. Я развернул серверный API для Heroku, и с тех пор у меня возникли проблемы с отображением аватаров чата в чате. Либо это нарушает мой код, либо появляется только неработающая ссылка на изображение.

Мой компонент сообщения выглядит следующим образом:

 import React from 'react';

const Message = props => {
  let options = { hour: "2-digit", minute: "2-digit", weekday: 'long', month: 'long', day: 'numeric' };
  let sentOn = new Date(props.message.created_at).toLocaleDateString("en-US", options)
  let imgSrc = `../img/${props.message.user.avatar}.png`
  return (
    <div className="message">
      <img className="chat-avi" src={require(imgSrc)} alt={`${props.message.user.avatar}`}/>
      <h5 className="msg-user-name">{props.message.user.name} ({props.message.user.pronouns})</h5>
      <p className="message-content">{props.message.content}</p>
      <p className="sent-on">sent on: {sentOn}</p>
    </div>
  )
}

export default Message;
  

Я также пытался:

 <img className="chat-avi" src={require(`../img/${props.message.user.avatar}.png`)} alt={`${props.message.user.avatar}`}/>
  

и

 <img className="chat-avi" src={imgSrc} alt={`${props.message.user.avatar}`}/>
  

Когда я использую require внутри атрибута src, мое приложение ломается, а когда я не использую require внутри атрибута src, я получаю неработающую ссылку на изображение.

В другом месте приложения я успешно вижу изображения, отображаемые, например, с помощью этого кода:

 <img className="avi-img" onClick={this.changeAvatar} src={require("../img/pink_fairy_armadillo.png")} alt="pink_fairy_armadillo"/>
  

Как вы можете видеть, основное отличие заключается в том, что в коде, где мой атрибут src работает не так, как ожидалось, мне нужно получить что-то из реквизита и передать это как часть URL-адреса изображения. Когда я смотрю на успешно отрисованный элемент изображения в инструментах разработчика, я вижу что-то вроде этого:

 <img class="avi-img" src="data:image/png;base64,iVBORw0KGgoAAAANSU [and etc as a long string]" alt="pink_fairy_armadillo">
  

URL-адрес src для поврежденных элементов изображения не преобразуется в аналогичную вещь. Когда мое приложение ломается, я получаю сообщение типа «Ошибка: не удается найти модуль’../img/pink_fairy_armadillo.png'».

Мое приложение работает должным образом при локальном запуске, проблема возникает только на Heroku. Спасибо за любую помощь.

Комментарии:

1. Какие инструменты сборки вы используете?

2. @Jkarttunen большое вам спасибо за ответ. Я нахожусь на бесплатном уровне, но пока только серверная часть развернута на Heroku. Я запускаю клиент на локальном хосте с запуском yarn, и изображения содержатся в папке изображений в клиентском приложении React. Когда я запускаю серверную часть Rails локально, у меня нет проблем. Но каким-то образом, поместив серверную часть на Heroku, мой интерфейс больше не может находить свои собственные изображения.

3. Как туда попадают изображения? Есть ли у вас какие-либо локальные сценарии сборки или конвейеры изображений, которые необходимо сначала запустить на heroku?

4. Когда я запускаю его локально, я просто получаю к ним доступ из папки images. Интерполяция строк берет строку из серверной части, которая представляет часть URL-адреса src изображения. Тем не менее, я очень знаком с Heroku. Если нужно запустить что-то дополнительное, и вы думаете, что в этом может быть моя проблема, как вы думаете, вы могли бы указать мне направление некоторых ключевых слов, чтобы начать поиск в Google, или соответствующую статью? Большое спасибо @Jkarttunen

5. Что вам нужно посмотреть, так это сценарии сборки для интерфейса. Вы используете сервер разработки локально (например, «запуск пряжи» в проекте CRA), но компилируете рабочую версию при использовании сервера heroku? Какие скрипты сборки для react вы используете? У вас есть ссылка на пример проекта, который использует те же скрипты сборки?