1

我只是得到一个与 rails gem一起使用的站点地图,并且在生产中生成站点地图时遇到了麻烦。

运行 rake 命令:rake sitemap:refresh在开发中创建sitemap.xml.gz公用文件夹中的文件。我导航到localhost:3000/sitemap.xml.gz并让它下载压缩文件。

当我在生产中运行它时(在 Digital Ocean VM 上使用 Dokku 的 Heroku 类命令行),我得到:

+ 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"):

看起来这个请求在应该由 Nginx 提供服务时遇到了 Rails 堆栈。我刚刚检查了文件是否存在:

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

它返回false,因此看起来站点地图实际上并未保存在文件中。我的文件系统现在是否有可能是只读的?我怎么能测试呢?

4

2 回答 2

2

使用新的 dokku docker-options 插件,您可以将持久存储/卷从您的主机附加到您的容器中。

首先在您的主机中创建一个本地目录。

mkdir <path/to/dir>

然后在 dokku 中添加以下 docker-options

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:refresh rake 任务应写入公共文件夹中的站点地图子文件夹。

这也将允许 sitemap_generator 用正确的地址 ping 搜索引擎到您的 sitemap.xml.gz 文件。

随意尝试一下。

于 2016-02-17T17:51:42.597 回答
1

我相信这是一个与 dokku 相关的“问题”。Dokku 使用 Heroku buildpacks,这会产生一个像 Heroku 一样的只读文件系统。

我很想知道是否有办法在 Dokku 中修改这种行为(如果使用 Heroku buildpacks 似乎不太可能),但这有点超出我的范围。

我认为这个问题的最佳解决方案与 Heroku 相同——使用 Amazon S3。

sitemap_generatorgem 有关于如何设置的文档。

于 2014-11-20T22:36:56.647 回答