Подтвердить что ты не робот

Rails 4 статические активы в общедоступных/приложениях/активах/

Извините, если это длинное наращивание к простому вопросу, но я хотел, чтобы мои мысли были понятны.

Я использовал Rails 4 в нескольких проектах сейчас, и я использовал image_tag('/assets/image.png'), чтобы обойти изменения в том, как помощники путей пути работают в Rails 4. Это до сегодняшнего дня, когда я решил узнать больше о и нашел эту первую заметку об изменении в цепях-рельсах. Я также отметил, что ASSET_PUBLIC_DIRECTORIES in/actionview/lib/action_view/helpers/asset_url_helper.rb#L170 в помощниках Rails указывает только на общие папки. Мне стало совершенно очевидно, что если вы обращаетесь к статическим файлам, Rails хочет, чтобы вы использовали общую папку.

Итак, теперь, когда я понял это, я просто не могу понять, почему в рельсы рекордов четко указано это:

В предыдущих версиях Rails все активы располагались в подкаталогах публичного типа, таких как изображения, javascripts и таблицы стилей. С конвейером активов предпочтительным местом для этих активов является каталог приложений/активов.

image_path на практике генерирует uri для папки public/images, которая совершенно противоположна.

И чтобы подвести итог всему этому, мне нужно использовать все доступные помощники и дайджест-строителей, потому что я в конечном итоге развертываю свои активы до S3 с помощью asset_sync.

Итак, мой вопрос справедлив; существует ли правильное место для размещения изображений/не скомпилированных активов и использования помощников атрибутов ресурсов? Вся документация и все другие обсуждают людей, использующих папку app/assets, но sprockets-rails хочет, чтобы мы использовали public для неперевариваемых активов. Являются ли документы и информация в Интернете просто нуждающимися в обновлении, или же другие просто делают это с добавлением всех путей к ресурсам с помощью /assets/?

ОБНОВЛЕНИЕ: Я думаю, что у меня действительно была проблема, когда я не перезапускал мой сервер разработки, а изображения в приложениях/активах/изображениях не отображались, поэтому они могли бы отказать общественности. Также обратите внимание, что я использовал помощники по активам в своем paperclip default_url (на который ссылается как способ указывать на активы в нескольких ответах на переполнение стека, которые я нашел, однако использование помощников пути ресурса с интерполированными опциями в папке скрепки также будет отбрасываться на публичные, поскольку Неинтерполированное имя актива не будет найдено как существующий файл.

4b9b3361

Ответ 1

Когда вы используете rake assets:precompile, Rails переносит все активы из вашей папки app/assets на public/assets. Это, как обычный браузер, не имеет доступа к вашему каталогу app, но имеет доступ к public.

Итак, чтобы ответить на ваш вопрос, вот мои мысли. Если ваши изображения предназначены для вашего макета сайта, например, логотипы или фоны, вы должны сохранить их в каталоге app/assets/images, однако, если изображения создаются пользователем, например изображения профиля, то они должны храниться непосредственно в чем-то, например public/images. В идеале вы бы сохранили файлы на S3 или CDN, но вы уже это делаете.

В качестве бонуса, Carrierwave, Gem для загрузки изображений Rails, использует путь типа public/images как хранилище по умолчанию для своих изображений, как вы можете видеть в своем файле конфигурации:

    # Override the directory where uploaded files will be stored.
    # This is a sensible default for uploaders that are meant to be mounted:
     def store_dir
     "images/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
     end

Надеюсь, это поможет!