使用web框架Sinatra开发基于web的回文检测器,学习使用嵌入式Ruby (ERB)创建动态内容,并在此过程中使用基于Ruby的站点布局。
在这最后一章中,我们达到了Ruby教程的高潮:一个动态web应用程序。我们的应用程序将利用第八章中开发的定制Ruby gem来开发一个基于web的应用程序回文探测器。在此过程中,我们将学习如何使用嵌入Ruby(ERB)。
从Web检测回文需要使用后端Web应用程序来处理表单提交,我们选择的工具是辛纳特拉即我们在1.5节中遇到的微框架,并在5.2节中进一步应用。虽然简单,但Sinatra并不是一个玩具——它是一个生产就绪的web框架公司就像条纹,苹果,迪斯尼。1
我们的回文应用程序还将有另外两个页面-主页和关于-这将给我们一个学习如何使用基于ruby的网站布局的机会。作为其中的一部分,我们将应用并扩展第8章中的工作,为我们的应用程序编写自动化测试。
最后,与第1.5节一样,我们的最后一步是将回文应用程序部署到实时Web。最后,我们将指向Ruby、Sinatra和其他主题(如JavaScript和Ruby on Rails)的进一步资源。
10.1设置
我们的第一步是将应用程序设置为概念验证,并将其部署到生产环境中。我们首先为它创建一个目录:
应用程序本身将驻留在该文件中app.rb,我们还需要一个Gemfile:
除了辛纳特拉和彪马宝石,我们也将包括重新运行,这将让我们看到应用程序的更改,而无需退出并重新启动本地服务器,如清单10.1所示。
清单10.1:为我们的应用定义宝石。
Gemfile
源“https://rubygems.org”鲁比(人名)“3.1.1”如果您使用的是不同的Ruby版本,请更改这一行。宝石辛纳特拉的,“2.2.0”宝石“彪马”,5.6.4”宝石“运行”,“0.13.1”
然后,我们可以使用包安装:
要开始使用应用程序本身,让我们编写“hello, world!”,如清单10.2所示。
清单10.2:说“你好”
app.rb
需要辛纳特拉的得到' / '做“hello, world !”结束
要运行该应用程序,我建议打开一个新的终端选项卡,然后使用重新运行命令,如清单10.3所示。
清单10.3:使用重新运行运行Sinatra的应用程序
$包执行重新运行app.rb12:10:10 [rerun] Palindrome_app启动12:10:10 [rerun]重新运行Palindrome_app (79575)== Sinatra在4567上登台进行开发监听本地主机:4567,按CTRL+C停止
就像运行Sinatra应用程序一样鲁比(人名)(例如,清单1.9),清单10.3在本地端口上运行应用程序,可以在日志输出中读取确切的数字。确切的结果可能与系统有关,但在我的系统上,日志显示类似“Sinatra已经登上了4567的舞台”(清单10.3中突出显示的一行),这意味着可以在localhost:4567访问站点。结果显示在图10.1。
图10.1:我们的初始应用程序运行与重新运行。
现在让我们看看如果对应用程序进行更改会发生什么,如清单10.4所示。
清单10.4:是时候说“再见”了。
app.rb
需要辛纳特拉的得到' / '做“再见,世界!”结束
在第5.2节中,我们必须退出并重新启动服务器才能看到应用程序的变化重新运行在清单10.3中,应用程序是自动更新的(尽管我们仍然需要手动刷新浏览器)。结果应该是这样的图10.2。
图10.2:一个自动更新的Sinatra应用。
最后,按照我们早部署、经常部署的做法,我们将把项目置于Git的版本控制之下,为部署到Heroku做准备:
和第1.5.1节一样,我们需要为Heroku添加一个配置文件:
内容如清单10.5所示(除了应用程序名称与清单1.12相同之外)。
清单10.5:用于生产部署的配置文件。
palindrome_app / config.ru
需要”。/应用程序运行辛纳特拉::应用程序
此时,我们已经准备好部署了(第一行可能是必要的,也可能不是必要的,但包含它并没有什么害处):
其结果是一个可在生产环境中工作的应用程序,如图所示图10.3。
图10.3:我们在生产中的初始应用。
大家练习
将应用程序更改回“hello, world!”,并将更新部署到生产环境。请注意第二次部署时,可以停止主要,然后输入Git push heroku。