如何使用Sinatra / Ruby / Rack / Haml加快重载和开发过程?

时间:2014-06-17 14:37:58

标签: css ruby sinatra haml

我正在构建Sinatra网站,在尝试Shotgun后,我正在使用Rerun在编辑文件后重新加载Thin server

但是,我发现开发/反馈循环非常费时。例如,对CSS,JavaScript或Haml文件进行少量更改需要7-8秒等待服务器重新加载,然后才能在浏览器中重新加载页面以查看更改。 (我的应用正在使用Sprockets来管理资产等。)

忽略这些重新加载是不可能的,因为页面因此不能反映这些变化并完全关闭反馈循环。

有没有办法简化这个过程,或者每个人每次想要看到变化时都会经历这种等待?来自PHP / CSS / HTML背景,我发现使用Sinatra / HAML进行开发相当痛苦,而且我觉得我错过了一个核心概念?

2 个答案:

答案 0 :(得分:0)

首先,我不认为您必须重新加载服务器以查看对静态文件的更改。因此,只需保存更改并刷新页面即可。

现在当你需要改变一些后端的东西时,我通常使用Shotgun宝石。假设您不在Windows上,可以运行gem install shotgun进行安装,然后运行shotgun config.ru以自动开始使用Rack。当您更改任何后端内容时,Shotgun会自动重新加载服务器,并且比手动执行此操作要快得多。如果需要,您也可以使用带有shotgun file.rb的直接Ruby文件来运行它。

您可以在Shotgun repository找到完整的Shotgun文档和来源。

答案 1 :(得分:0)

@Cereal - 谢谢你,但是我在尝试使用Shotgun的问题中提到过,但它的运行速度也很慢。

@the Tin Man - 谢谢,很高兴知道对HAML的更改不需要重新加载。

我想,毕竟有一些研究让我看到了这篇文章,这篇文章对于实现警卫/机架实时重载非常有用:Lightning-Fast Sass Reloading

完成此过程后,一切运行良好,实时重新加载功能令人惊叹。由于本文适用于rails,我不得不(而不是config/environments/development.rb)添加:

<强> config.ru

require 'rack-livereload'
use Rack::LiveReload
然而,最重要的是,意识到sprockets确实提供了改变的.js, .css等,而不需要重新加载服务器,即使它被缩小/连接。因此,可以通过强制重新运行忽略.haml, .scss, .css, .js来生成巨大的加速,这最终就像修复我的rerun命令以忽略这些文件一样简单:

rerun rackup config.ru -i '**/*.{haml,scss,css,js}'

但是,毕竟我很高兴使用guard/livereload,最后,这种组合非常好:

最终解决方案(配置后)

使用更改的重新运行命令运行服务器(因此服务器在实际更改.rb文件时重新加载):
rerun rackup config.ru -i '**/*.{haml,scss,css,js}'

运行警卫以监控资产变更/ livereload:
bundle exec guard -P livereload