Создание файла Sitemap не сохраняет файл в хранилище

Я только что получил карту сайта в комплекте с rails gem, и у меня возникли проблемы при создании карты сайта в производстве.

Запуск команды грабли: rake sitemap:refresh в разработке создает sitemap.xml.gz файл в общей папке. Я перехожу к localhost:3000/sitemap.xml.gz и получить его загружает заархивированный файл.

Когда я запускаю его в режиме производства (Heroku-подобная командная строка с Dokku на виртуальной машине Digital Ocean), я получаю:

+ sitemap.xml.gz                                           6 links /  450 Bytes
Sitemap stats: 6 links / 1 sitemaps / 0m00s

Pinging with URL 'https://www.myapp.com/sitemap.xml.gz':
  Successful ping of Google
  Successful ping of Bing

Похоже, файл был создан, поэтому я перехожу к www.myapp.com/sitemap.xml.gz и получите ответ 404.

Сервер говорит:

ActionController::RoutingError (No route matches [GET] "/sitemap.xml.gz"):

Похоже, что этот запрос попадает в стек Rails, когда он должен обслуживаться Nginx. Я только что проверил, существует ли файл:

FileTest.exists?("public/sitemap.xml.gz")

Возвращается false так что кажется, что карта сайта на самом деле не сохраняется в файле. Возможно ли, что моя файловая система доступна только для чтения прямо сейчас? Как я мог это проверить?

2 ответа

Решение

Я считаю, что это вопрос, связанный с докку. Dokku использует пакеты сборки Heroku, и это дает файловую систему только для чтения, как в Heroku.

Мне было бы любопытно узнать, есть ли способ изменить это поведение в Dokku (кажется маловероятным, если использовать сборочные пакеты Heroku), но это немного не в моей лиге.

Я думаю, что лучшее решение этой проблемы такое же, как на Heroku - с использованием Amazon S3.

sitemap_generator У gem есть документы о том, как это настроить.

С помощью нового подключаемого модуля docker-options dokku вы можете добавить постоянное хранилище / том с вашего хоста в ваш контейнер.

Сначала создайте локальный каталог на вашем хост-компьютере.

mkdir <path/to/dir>

Затем добавьте следующие параметры Docker в Dokku

dokku docker-options:add <app> deploy,run -v <path/to/host/dir>:<path/to/container/public/sub/dir>:rw

В файле config/sitemap.rb добавьте следующие строки

SitemapGenerator::Sitemap.public_path = 'public/sitemap/'
SitemapGenerator::Sitemap.sitemaps_path = 'sitemap/'

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

Это также позволит sitemap_generator пинговать поисковую систему с правильным адресом в файле sitemap.xml.gz.

Не стесняйтесь попробовать.

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