Удаление кэша, арестовывающего в производстве направляющих

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

Blob imageBlob = resultSet.getBlob(blobIndex);

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

resultSet.getBinaryStream(blobIndex)

или байтовый массив, используя

imageBlob.getBytes

. Получив массив байтов, вы можете использовать

setImageBitmap(BitmapFactory.decodeByteArray(byteArray, 0, Bytes.length));

для установки изображение в представлении изображения.

9
задан Laurie Young 8 October 2008 в 15:17
поделиться

3 ответа

Я думаю, что можно использовать ENV ['RAILS_ASSET_ID'] для изменения арестовывающего кэш идентификатора актива. К сожалению, это для всех активов.

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

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

Наконец, можно всегда переопределять rails_asset_id с собственным методом.

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

6
ответ дан 4 December 2019 в 11:09
поделиться

Capistrano, по умолчанию, касается каждого файла, он рассматривает 'актив'. Как Вы сказали, это означает после того, как каждый развертывать направляющие думает, что каждый актив изменился, и браузеры wil загружают более новую версию каждый раз.

Можно отключить это в Capistrano со следующей установкой

set :normalize_asset_timestamps, false

При использовании SVN затем, измененные даты файлов должны отразить даты, они были в последний раз изменены в репозитории, так, чтобы было прекрасно.

При использовании Apache можно добавить что-то вроде этого к реальному созданию кэширующейся работы для Вас. Это помогает, говоря браузеру полагаться на "директивы" Управления Кэшем, означающие, знает ли он, что актив кэшируется, он даже не потрудится запрашивать это.

#Etags should be based on the file parameters only (default includes INode)
FileETag MTime Size  

#Rewrite stuff
RewriteEngine On  

#This sets the environment variable (is_versioned) when the URL query string
#looks like ?874353948543  or any string of digits
RewriteCond %{QUERY_STRING} ^[0-9]+$
RewriteRule ^(.*)$ $1 [env=is_versioned:true]  

<Directory /deployed-rails-app/public/ >
    Options -Indexes FollowSymLinks -MultiViews
    AllowOverride None
    Order allow,deny
    allow from all  

    #For files, force the browser to rely on cache-control directives and 
    #Rails asset timestamps by removing Etags and Last-Modified dates  

    #For all assets that aren't stamped by rails, cache them for ~ 3 hours
    Header set "Cache-Control" "max-age=10000"
    Header unset Etag
    Header unset "Last-Modified"  

    #For all assets that ARE stamped by rails, cache them for 30 days
    Header set "Cache-Control" "max-age=2592000" env=is_versioned

</Directory>

Я установил свой рабочий сервер этот путь и теперь возвращаюсь, посетители только выполняют, один запрос (Доберитесь/), который возвращает динамический контент, и все активы (~ 40 - 50) кэшируются.

13
ответ дан 4 December 2019 в 11:09
поделиться

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

Конечно, генерация MD5 является дорогой и медленной, но можно кэшировать MD5 файла в кэш-памяти, (включил время изменения, как будто время изменилось, MD5, возможно, изменился, но если метка времени не изменилась, MD5 не будет изменяться

0
ответ дан 4 December 2019 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: