Создание файла 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.
Не стесняйтесь попробовать.