Nano Hash - криптовалюты, майнинг, программирование

Ошибка маршрутизации скрепки в Rails 3.1: применяется только к новым изображениям

У меня практически та же проблема, что и у этого вопрошающего: ошибка маршрутизации скрепки. Сервер выдает 404 для статического файла (который присутствует!), поэтому вызывается Rails, а затем возникает ошибка маршрутизации.

Приложение My Rails 3.1 использует скрепку для прикрепления файлов, но при обслуживании файлов в рабочей среде Rails регистрирует следующую ошибку:

Started GET "/system/images/9/thumb/Large%20image.jpg?1320149338" for [...]

ActionController::RoutingError (No route matches [GET] "/system/images/9/thumb/Large%20image.jpg"):

Соответствует записи журнала доступа NGINX:

"GET /system/images/9/thumb/Large%20image.jpg HTTP/1.1" 404 728 "-" [...]

Итак, несколько наблюдений:

  • Раньше такого не было, и прошлые изображения с почти идентичными URL-адресами до сих пор работают, например: /system/images/1/thumb/StoneSkimming%20Demyhb%20Art%203.jpg обслуживается правильно.
  • Файлы изображений были загружены и преобразованы ImageMagick правильно — я проверил, что все ожидаемые файлы находятся в нужном месте и являются действительными файлами JPEG с правильным изображением в них.
  • Права доступа к файлам соответствуют ожиданиям и соответствуют файлам, которые все еще работают.
  • Записи в базе данных для соответствующей модели выглядят правильно.
  • Добавление/удаление строки запроса или ввод URL-адреса непосредственно в браузер дает тот же результат, что и встроенный тег <img>: изображение не найдено.

Может ли кто-нибудь указать мне правильное направление здесь? У меня возникли проблемы с тем, как протестировать/отладить это, потому что ошибка не универсальна для приложения.

Я использую Capistrano для развертывания, поэтому /public/system — это символическая ссылка на общий каталог. Я чувствую, что это не проблема, поскольку старые изображения в том же месте работают нормально.


  • ты когда-нибудь это понял? У меня похожая проблема, но не со скрепкой, а с некоторыми динамически генерируемыми изображениями. 22.12.2011
  • Боюсь, я этого не сделал. В конце концов я просто стер все на производстве и начал заново. Нехорошо, если это повторится, конечно. Я также заморозил версию Paperclip до версии 2.4.4, чтобы избежать аналогичной ошибки, связанной с символами в URL-кодировке в именах файлов, но это должно было быть иначе, поскольку некоторые файлы в URL-кодировке работали. Возможно, это произошло из-за того, что в последующих версиях Paperclip появились, а затем исправлены ошибки именования, но у меня нет времени проверять эту теорию! 22.12.2011

Ответы:


1

Мне удалось решить проблемы со скрепкой при развертывании с помощью capistrano в рабочей среде, добавив в конфигурацию развертывания capistrano:

namespace :deploy do
  desc "build missing paperclip styles"
  task :build_missing_paperclip_styles, :roles => :app do
    run "cd #{current_path}; RAILS_ENV=production bundle exec rake paperclip:refresh:missing_styles"
  end
end

after("deploy:update_code", "deploy:build_missing_paperclip_styles")

Вероятно, есть лучшее решение.

26.02.2012
  • Спасибо за подсказку Агрис. Однако я уже добавил код, который вы предлагаете, в config/deploy.rb в соответствии с описанием Paperclip. Боюсь, я не думаю, что дело было в этом. 27.02.2012
  • Я изменил свой файл конфигурации nginx, чтобы обслуживать статические файлы не только для конвейера ресурсов, но и для системной папки, где скрепка хранит файлы по умолчанию. По крайней мере, это решило проблему маршрутизации с файлами скрепки для меня. 29.02.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..