2015-03-31 3 views
1

В настоящее время я обслуживаю все изображения в своем приложении из CDN. Изображения находятся в папке app/assets/images в моем приложении rails.Обслуживание статических изображений больших изображений

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

Однако существует десяток больших файлов изображений, которые почти никогда не меняются, в основном для пользователей, пока они не вошли в систему, как часть карусели или что-то еще.

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

Моя идея состояла в том, чтобы поместить изображения в vendor/assets/images и загрузить их прямо в мое приложение без суффикса/хэша, сгенерированного приложением. Пример: если у вас есть изображение в вашем приложении с именем 2.jpg, после того, как активы были предварительно скомпилированы, он мог быть сохранен в CDN как 2-49d87927b61510021a3cd0a895502625.jpg или что-то в этом роде.

Так что я бы теперь добавляют это выше изображение:

= image_tag('2.jpg', alt: '') 

Но так как у меня есть эта линия в моем assets.rb инициализаторе:

Rails.application.config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) 

Изображение 2.jpg будет прекомпилирована с хэш по производству Окружающая среда.

Итак, как я могу использовать это изображение, которое не было предварительно скомпилировано с помощью hash on prod, но оставалось прежним?

Если я ставлю:

= image_tag('2.jpg', alt: '') 

Оно должно отображаться как <image src='http://CDN_URL/assets/2.jpg' />, а не <image src='CND_URL/assets/2-23123dasdasdsadsasad21312.jpg' />, потому что это один находится под vendor/assets/images я все еще хочу, чтобы мои регулярные изображения app/assets/images быть вручено хэша. Это возможно? и как?

Update:

В моей среде разработки я не сервер статических активов. Просто регулярная версия конфигурации. Но я бы предпочел решение, которое работает для обеих сред (DEV и PROD).

Update II:

Похоже %img{src: 'assets/2.jpg'} загружает файл из vendor/assets/images, который прекрасно.

Еще другая проблема сохраняется, когда я перекомпилировать активы и когда я Rails.application.config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) в assets.rb инициализаторе изображения с хэшем т.е. 2-32131dasdaeasee12eda.jpg

Если удалить Rails.application.config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif) от конфигурации, нет изображений 2.jpg не копируются в public/assets , и поэтому не копируются в CDN.

+0

Почему бы не использовать ''? для ваших статических изображений. image_tag всегда будет добавлять маску md5 (или все, что вы используете) – Avdept

+0

@Avdept '% img {src: 'images/2.png'}' даже не работает на localhost. В разработке, где я не сервер статические активы –

+0

не должно быть, как '/ images/2.png''? – Avdept

ответ

1

Предпосылки для вашей проблемы не является правильным:

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

Хешированный отпечаток пальца - это MD5 содержимого файла. Если файл не изменился, то и отпечаток пальца не будет. Нет причин, по которым вам нужно делать исключение для больших файлов - система должна работать точно так, как вы хотите, без настройки процесса.

+0

, это потрясающе, если true. Я дам это испытание, спасибо –

+0

@GandalfStormCrow Это весь смысл отпечатки пальцев. Добавленные цифры не являются произвольными. – meagar

1

Если вы хотите статические файлы сервисов без печати пальцев или какие-либо другие преимущества конвейера активов, то не использовать конвейер активов.

Поместите свои файлы в /public.

Смежные вопросы