Ресурсы Rails 3.1 не распознают новые изображения, загруженные rmagick, до перезагрузки сервера

У меня есть мой Rails 3.1.0 приложение работает с passenger в production окружающая среда, и у меня есть раздел, где приложение позволяет пользователю изменять изображение своего профиля, поэтому я загружаю изображение с помощью загрузчика ajax, и в моем контроллере я загружаю файл и генерирую различные размеры для изображения с помощью rmagick, а затем отображаю новое изображение с image_tag но приложение не покажет изображение, пока я не перезапущу сервер.

Что я получаю No route matches [GET] "assets/path/to/image.png"

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

Как я могу решить, как правильно работать с активами?

1 ответ

Конвейер ресурсов Rails действительно предназначен для структурных / дизайнерских изображений, таких как фоны, значки, баннеры и т. Д.). Динамические активы должны находиться в публичном каталоге [источник ниже]

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

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

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

вам понадобится что-то подобное в вашей конфигурации:

# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false

# Compress JavaScripts and CSS
config.assets.compress = true

# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false

# Generate digests for assets URLs
config.assets.digest = true

# UNCOMMENT the header that your server uses for sending files
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

Более общие:

http://railscasts.com/episodes/279-understanding-the-asset-pipeline

http://guides.rubyonrails.org/asset_pipeline.html

Rails 3.1: следует ли добавлять загрузки файлов в конвейер ресурсов?

Относительно обслуживания изображений вне конвейера активов:

http://mrjaba.posterous.com/rails-31-asset-pipeline-with-nginx-and-passen

http://trackingrails.com/posts/rails-31-and-asset-pipeline-problems-with-apache

http://pastebin.com/kC4Ba40U

https://github.com/defunkt/resque/issues/418

Другие вопросы по тегам