我在Heroku上运行一个Middleman网站,并使用Contentful来管理内容。我想使用Contentful的webhooks,并设置我的应用程序以使用contentful_middleman gem的新webhook选项(在主分支上)。
它的工作原理是通过运行" middleman contentful --rebuild"来重建资产。当它收到" / receive"。
上的webhook通知时由于其短暂的文件系统,这个流程注定在heroku上注定了吗?看起来好像,从下面的日志开始。
如果是这样,有没有一个heroku友好的方式重建一个中间人应用程序已经发布后?或者我是否需要切换平台以便以这种方式使用有意义的webhook?
2015-11-16T21:42:05.776622 + 00:00 app [web.1]:cache:[POST / receive] pass
2015-11-16T21:42:35.818683 + 00:00 heroku [router]:at = info method = POST path =" / receive" host = www.mysite.com request_id = some_id fwd =" ip,另一个ip" dyno = web.1 connect = 0ms service = 13ms status = 405 bytes = 367
2015-11-16T21:42:35.849264 + 00:00 app [web.1]:/ app/vendor/ruby-2.0.0/lib/ruby/2.0.0/fileutils.rb:203:in {{1} }呼叫'
2015-11-16T21:42:35.849268 + 00:00 app [web.1]:/app/vendor/bundle/ruby/2.0.0/gems/rack-cache-1.2/lib/rack/cache/storage.rb :37:each'
2015-11-16T21:42:35.849253+00:00 app[web.1]: cache error: Read-only file system - /var/cache
2015-11-16T21:42:35.849435+00:00 app[web.1]: cache: [POST /receive] pass
2015-11-16T21:42:35.849281+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/puma-2.11.3/lib/puma/thread_pool.rb:104:in
无效'
2015-11-16T21:42:35.849279 + 00:00 app [web.1]:/app/vendor/bundle/ruby/2.0.0/gems/puma-2.11.3/lib/puma/configuration.rb:51 :在create_store'
2015-11-16T21:42:35.849270+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/rack-cache-1.2/lib/rack/cache/context.rb:149:in
mkdir_p'
2015-11-16T21:42:35.849257 + 00:00 app [web.1]:/ app/vendor/ruby-2.0.0/lib/ruby/2.0.0/fileutils.rb:242:in {{1} }新'
2015-11-16T21:42:35.849277 + 00:00 app [web.1]:/app/vendor/bundle/ruby/2.0.0/gems/rack-cache-1.2/lib/rack/cache/context.rb :51:在call'
2015-11-16T21:42:35.849265+00:00 app[web.1]: /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/fileutils.rb:203:in
块中运行'
2015-11-16T21:42:35.849256 + 00:00 app [web.1]:/ app/vendor/ruby-2.0.0/lib/ruby/2.0.0/fileutils.rb:242:in {{1}在mkdir_p'中阻止(2级)
2015-11-16T21:42:35.849266 + 00:00 app [web.1]:/app/vendor/bundle/ruby/2.0.0/gems/rack-cache-1.2/lib/rack/cache/metastore.rb :218:在fu_mkdir'
2015-11-16T21:42:35.849267+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/rack-cache-1.2/lib/rack/cache/metastore.rb:261:in
process_client'
2015-11-16T21:42:35.849263 + 00:00 app [web.1]:/app/vendor/ruby-2.0.0/lib/ruby/2.0.0/fileutils.rb:217:in {{1}阻止在mkdir_p'
2015-11-16T21:42:35.849269 + 00:00 app [web.1]:/app/vendor/bundle/ruby/2.0.0/gems/rack-cache-1.2/lib/rack/cache/storage.rb :18:call'
2015-11-16T21:42:35.849280+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/puma-2.11.3/lib/puma/server.rb:262:in
来电!'
2015-11-16T21:42:35.849282 + 00:00 app [web.1]:/app/vendor/bundle/ruby/2.0.0/gems/puma-2.11.3/lib/puma/thread_pool.rb:104 :在mkdir'
2015-11-16T21:42:35.849259+00:00 app[web.1]: /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/fileutils.rb:219:in
解决'
2015-11-16T21:42:35.849269 + 00:00 app [web.1]:/app/vendor/bundle/ruby/2.0.0/gems/rack-cache-1.2/lib/rack/cache/context.rb :34:initialize'
2015-11-16T21:42:35.849280+00:00 app[web.1]: /app/vendor/bundle/ruby/2.0.0/gems/puma-2.11.3/lib/puma/server.rb:375:in
来电'
2015-11-16T21:42:35.849279 + 00:00 app [web.1]:/app/vendor/bundle/ruby/2.0.0/gems/puma-2.11.3/lib/puma/server.rb:507 :在`handle_request'
答案 0 :(得分:1)
遗憾的是,如果不进行新的推送,就无法更新Heroku上的静态网站。正如你所说,这是Heroku本身的限制。
替代方案是:
Netlify(如其他回复中所述)
GitHub Pages
锻造
可能还有其他静态网站主机...
我只测试了GitHub页面,而其他人已经被其他人使用,使用了一种hackish但是工作了。
让我继续解释一下:
让您的预览服务器在本地运行。
运行ngrok http $SOME_FREE_PORT
设置定位$YOUR_NGROK_URL:$SOME_FREE_PORT/receive
让您的/build
目录托管一个新的Git Repo,其中pages
遥控器指向GitHub页面
目前,Webhook控制器不可配置(但将来会发布)。与此同时,您可以执行以下操作:
module ContentfulMiddleman
class WebhookHandler
def perform(*)
super
rebuild_and_push = <<-BASH
bundle exec middleman contentful --rebuild && \
bundle exec middleman build && \
cd build && \
git commit -ca "Webhook Triggered Rebuild" && \
git push pages master
BASH
system(rebuild_and_push)
end
end
end
如果你自动推送到Heroku而不是GitHub页面,这个工作流程可以应用于Heroku。
希望这有帮助。
如果可能,您可以在我们的GitHub repo上打开一个问题,以便我们可以为此用例添加适当的教程并获取Custom Webhook处理程序的提醒吗?
答案 1 :(得分:0)
我在这方面的水平还远远不够,并且没有测试过,但在设置中间人应用之前我一直在寻找类似的解决方案。我发现了这篇使用Netlify的帖子:http://netengine.com.au/blog/simple-static-sites/
Netlify会自动托管该网站,但您也可以将构建过程配置为在其他位置部署。
同样,我非常喜欢这个,但希望它有一些答案......
修改强> 如果你有这个工作,我很想听听......
答案 2 :(得分:0)
我强烈建议您转到Netlify。它已经内置了webhook,并将生成一个可以添加到Contentful的URL。每当在Contentful上发布新帖子时,都会通知Netlify,并运行以下构建命令...
middleman contentful --rebuild; middleman build --verbose
我已经为我正在运行的设置制作了公共回购,现在它还在继续进行,而我使用Middleman v4进行了一些测试,并且Contentful gem稍微过时,因为它是v4的分支。但它应该帮助你如何设置它。