Ruby on Rails 简介。来自于一个台湾网站,某些术语与大陆翻译不同

news/2024/5/12 7:16:00/文章来源:https://blog.csdn.net/xyqzki/article/details/45727839

转:https://ihower.tw/rails4/intro.html


Ruby on Rails 簡介

“Life’s too short to build something nobody wants” - Ash Maurya, Running Lean 作者

Ruby on Rails是一套非常有生產力、維護性高、容易佈署的Web開發框架。從一開始不知名的玩具,到現在它已經成為全世界Web應用程式開發的首選框架之一。進入學習的旅程之前,我們先了解為什麼它如此特別?

什麼是網站開發框架(Web framework)

1990Tim Berners-Lee發明全球資訊網之後,就開始有了動態網頁的需求,早期最風行的方法是使用Perl CGI,會在Perl程式中,輸出HTML內容,例如以下是一個簡單的計數器:

#!/usr/bin/perlopen(FILE, "count.txt");
$num = <FILE>; $num++;
close (FILE);open(WRITETO, ">count.txt");
print WRITETO "$num";
close (WRITETO);print <<PRINTAREA;
content-type:text/html\n\n
<style>
<!--
body {background-color: black; line-height:1;
margin-top: 0cm;
margin-left: 0cm;
margin-right: 0cm}
-->
</style>
<body><center>
<b><font size=1 color=white>
$num</font></b>
PRINTAREA

讀者可以發現,這樣的方式在HTML內容佔多數的情況,顯著十分不容易維護及閱讀。大約在2000年左右,PHPASP等以樣板(Template)為主的程式語言出現了,同時期搭配著關聯式資料庫如MySQL一起流行起來。這種寫法與上述的Perl CGI恰巧相反,是在HTML樣板中內嵌入程式和SQL指令,例如以下是一個PHP&MySQL程式,其中用<?php ... ?>括起來的部份,就是PHP程式:

<?php$db = mysql_connect("localhost", "root", "password");mysql_query("SET NAMES 'utf8'");mysql_select_db($SERVER['db']);
?>
<html><?php$sql="select * from news where Class='1' or Class='3' order by CTDate desc limit 0,5";$result= mysql_query($sql);while ( $arr=mysql_fetch_array($result) ) {echo <<<NEWSEND<div class="box"><span class="box-title-1"> <b>【$arr[Title]】</b> $arr[CTDate] </span><div class="box-content">$arr[Text]</div></div>NEWSEND;}?>
</html>

這種用法非常容易使用。特別像是討論區、部落格(Blog)、內容管理系統(CMS)Wiki這類系統,重點主要在資料的保存和顯示,牽扯的複雜商業邏輯不多,特別適合這樣的開發方式。程式只是資料庫系統的糖衣介面,不需要MVC架構、不需要頁面與程式邏輯分開、不需要物件導向技術,也可以開發的很好。

但是近年來隨著Web 2.0和雲端風潮帶來越來越多的Web應用程式開發需求,網站軟體的規模開始增加,需要加入更多的商業邏輯和功能,這樣的開發方式,導致了整個專案的結構變得十分混雜,不利於團隊合作開發。要接手維護這樣的網站,常常會不知道如何閱讀及修改起,因為所有的商務邏輯與HTML混雜在一起,不同人開發就有不同的程式架構,缺乏程式文件是常有的事情,也不容易進行測試。

於是我們有了Web開發框架的需求,引入完整的物件導向觀念和技術。而所謂的框架就是制定好了一套規範和慣例,讓開發者在該架構下來進行開發。

維基百科是這樣定義的:「軟體框架(Software framework)」是為了實現某個業界標準或完成特定基本任務的軟體組件規範,也指為了實現某個軟體組件規範時,提供規範所要求之基礎功能的軟體產品。框架的功能類似於基礎設施,與具體的軟體應用無關,但是提供並實現最為基礎的軟體架構和體系。軟體開發者通常依據特定的框架實現更為複雜的商業運用和業務邏輯。這樣的軟體應用可以在支持同一種框架的軟體系統中運行。

非常多的Web框架都實踐一個叫做MVC的軟體架構設計模式,將軟體分成三個部分:

  • Model物件包裝了資料與商業邏輯,例如操作資料庫
  • View表示使用者介面,顯示及編輯表單,可內嵌Ruby程式的HTML
  • Controller負責將資料送進送出Model,處理從外界(也就是瀏覽器)來的HTTP Request請求,與Model互動後輸出View(也就是HTML)

MVC diagram

這張圖示中的執行步驟是:

  1. 瀏覽器發出HTTP request請求
  2. 負責處理的Controller操作Model資料
  3. Model存取資料庫
  4. Controller將得到的資料餵給View樣板
  5. 回傳最後的HTML成品給瀏覽器

透過MVC模式,我們可以有系統的組織程式碼,並且分離商業邏輯和使用者介面,讓前端與後端開發者可以獨立作業,也讓程式碼有著一致性的結構,檔案位置清楚,這些慣例Web框架都幫你想好了。有了程式規範,也就比較容易維護開發了。

也有不實踐MVC的小型Web框架,通常稱做Micro-framework,例如Sinatra,我們會在Ruby錦囊妙計一章中簡單介紹這個不同思維的Web開發框架。

桌面軟體的MVCWeb MVC有一些差異,主要是因為Web MVC中的View沒有辦法透過Observer模式來進行更新。有興趣的朋友可以參考Model View Controller: History, theory and usage這篇文章。

Web框架通常包括以下功能,

ORM

ORM(Object-relational mapping)可以用物件導向語法來操作關聯式資料庫,容易使用、撰碼十分有效率,不需要撰寫繁瑣的SQL語法,也增加了程式碼維護性。例如:

SELECT * FROM orders, users WHERE orders.user_id = users.id AND orders.status = "Paid" LIMIT 5 ORDER BY orders.created_at;

這一段SQL敘述,在Rails中的語法是:

Order.where(:status => "paid").includes(:user).limit(5).order("created_at")

URL路由

不同於PHP直接使用檔案目錄結構來對應網址,例如網址是/foo/bar,就得有個檔案在/foo/bar.php下。這種一對一的方式雖然直覺,但是卻大大限制了程式架構和開發,網址也常常不漂亮,不利於SEO(Search engine optimization)

使用Web框架則沒有這種問題,你擁有最大的彈性,您可以指定任意URL對應到任一個Controller的動作,跟檔案位置是無關的。

此外,Web框架也附帶了非常多開發Web會用到的函式庫,例如TemplateEmailSession、快取、JavaScript/Ajax、測試等等。這也是為什麼使用Web框架可以大大加速網站專案的開發時程,因為開發Web應用程式會用到的功能大部分都內建了,我們不需要重複開發輪子。

什麼是Ruby on Rails

Ruby on Rails(官方簡稱為RailsRoR非官方簡稱)是使用Ruby這套開放原始碼(採用MIT授權)、物件導向程式語言所開發的Web開發框架,主要用於開發資料庫網站應用程式。Rails是一套專業的開發框架,採用了MVC(Model-View-Control)模式、內建支援單元測試和整合測試、支援AjaxRESTful介面、ORM機制,以及支援各種最新的業界標準像是HTML5JQuery等等功能。它的發明人是David Heinemeier Hanson(DHH)DHH2004年將Rails37signals商業產品中獨立出來成為開源專案。

它的設計目標是只要開發者熟悉它的慣例,它就可以讓網站開發變的非常容易。而相對於其他程式語言和框架,Rails可以讓你用更少的程式碼達成更多的功能,它甚至讓網站開發變得更有趣。

Rails的哲學包括以下指導原則:

  • 不要重複自己(DRY: Don’t Repeat Yourself) – 撰寫出重複的程式碼是件壞事
  • 慣例勝於設定(Convention Over Configuration) – Rails會預設各種好的設定跟慣例,而不是要求你設定每一個細節到設定檔中。
  • REST是網站應用程式的最佳模式 – 使用Resources和標準的HTTP verbs(動詞)來組織你的應用程式是最快的方式(我們會在路徑一章詳細介紹這個強大的設計)

為何選擇Rails

這是一個開發框架的時代,熟悉開發框架的人,可以很快的完成任務以及熟悉網站程式的架構。而各種程式語言要入門上手,其實都不會太困難。我認為重點會在於你不能夠熟悉做事情的框架。

所以,撇開程式語言的偏好,Ruby on Rails是目前網站開發框架中做前端(提供動態HTML給瀏覽器)應用伺服器最為成功和技術先進的。它的概念也深深影響了非常多其他程式語言的後進網站開發框架,例如ASP.NET MVCCakePHPGrailsTurboGearsPylonsweb2pycatalyst等等(模仿是最大的恭維)。我們可以用非常有效率的程式碼開發出網站應用程式。另外,可能會讓你感到意外的是,它也是目前動態語言中,生態圈最為豐富的網站開發框架,相關的書籍、研討會、顧問公司、第三方服務、外掛套件等等十分豐富。因為使用Rails的人數眾多,所以在開發上各個方向都有人提供了最佳實務,像是如何寫出好的程式碼、網站安全性、網站性能、擴充性、全文搜尋、非同步處理等等,這是一個非常活躍的社群。

當然,最重要的一個理由,就是採用Rails後生產力暴增:寫新的應用程式、增加新功能變成容易地多。讓你可以用更少程式碼做更多的事情,而且程式也更容易維護。當然,學習新工具總是需要時間投資的,一開始可能沒辦法立刻見效。但是如果你有長期的開發工作,而且網站有一定的複雜性,那麼一個短期學習Ruby on Rails的投資,長期來說將會是非常值得的。

Rails 不是什麼

  • 如上所述,Rails是一個打造網站應用程式的開發框架,如果你只需要靜態的HTML,那是絕不需要用到Rails的。
  • Rails不是CMS(Content Management System)內容管理系統。CMS是一套寫好的架站系統,可以讓你不需要寫程式就可以架站。市面上流行成熟的CMS系統多為PHP寫成,例如DrupalWordPress等。當然也有用Ruby寫的,例如Radiant。如果這些架站系統剛好符合你的需求,那就不一定需要Rails
  • Rails是一套網站開發框架幫助你建立網站應用程式,它不是程式語言。

什麼是Ruby

Rails是一套使用Ruby開發的網站框架。如果您對Ruby一無所知就一頭栽進Rails,恐怕不是個好主意。

Ruby是一套開放原碼、物件導向的動態直譯式(interpreted)程式語言,它有著簡單哲學、高生產力、精巧、自然的語法。他的創造者是來自日本的松本行弘(又名Matz),設計的靈感來自於LispPerlSmalltalk,設計的目的是要讓程式設計師能夠快樂地寫程式。

讓我們看一個非常簡單的範例:

str = "May Ruby be with you!"
5.times { puts str }

這的範例就簡單告訴我們有關Ruby的三件事情了:

  • 動態分型(typing),不需要宣告型態
  • 每樣東西都是物件,包括數字
  • 匿名函式(code block)隨處可見

我們會在Ruby一章介紹基本的語法,讓各位讀者可以很快的入門。

動態語言的好處

為什麼開發伺服器端應用程式,使用動態語言(RubyPythonPHPPerl等)比起靜態語言(JavaC++等)有更好的優勢呢?

靜態語言和動態語言的差別在於,前者的變數型別需要事前宣告,後者則是執行期才動態決定。實務上,就看程式需不需要事前編譯這個動作了。

著名的”人月神話”一書作者Fred Brooks曾說:「一個程式設計師一天能產生的程式碼行數是差不多的,無論什麼程式語言」。因此一個具有表達能力的高階程式語言,就會比低階的程式語言能完成更多功能。相較於靜態程式語言,使用更高階的動態腳本語言可以幫助我們:

  1. 用更少程式碼做更多事情,大大增加生產力
  2. 更快因應客戶開發需求,敏捷開發

不過,動態語言也不是沒有缺點:

  1. 執行效能是絕對比不上靜態語言的
  2. 沒有編譯期可以檢查型別錯誤

但是,我們知道現在的電腦越來越快、越來越便宜、上網越來越容易、記憶體越來越多、硬碟越來越大。另外,行動裝置也越來越多,需要搭配的網路服務需求也增加了。這些趨勢告訴我們有更多的軟體的需求,另一方面由於硬體效能的增強,人力開發成本比起軟體的執行期的效能,也越來越重要。同樣一個程式,用動態語言執行的效能已經可以達到實用(例如每秒可以處理50~500個的HTTP請求,也可以透過增加伺服器來擴展架構),也許用靜態語言後的執行速度可以再快一倍,但是卻需要十倍以上的時間來開發,這件事情是不是值得呢?

在硬體資源有限的行動裝置及嵌入式系統上,仍是靜態語言的天下,這一點需要更多時間才有動態語言的生存空間。

沒有編譯期可以檢查型別錯誤的問題,也隨著單元測試和TDD(Test-driven development)測試驅動開發等敏捷最佳實務而逐漸降低重要性。而大部分的Bug會出自於商業邏輯錯誤,而不是型別錯誤上。

為何選擇Ruby

Ruby 是一套非常重視使用性(Usability)的物件導向程式語言,非常看重程式碼的可讀性及維護性。Matz在設計Ruby時,就特別考量一般人容不容易了解(他說我們都是凡人,像Lisp是給神人用的)。這也是為什麼你常常會聽到Ruby的程式碼自然簡潔又漂亮。您可以看看這份 Ruby創造者MatzWhy Ruby?投影片或是Matz的演講:RubyConf 2008RubyConf 2009Mountain West Ruby Conference 2010,相信您會更了解及喜愛Ruby的哲學。

Ruby也是目前做Domain-specific language(DSL),特別是Internal DSL最為成功的程式語言。透過DSL,程式不但可以擁有非常好的可讀性,也可以大幅增加生產力。成功的DSL函式庫例如有:Rake建構工具、RSpec測試工具、Chef伺服器設定工具、Cucumber驗收測試等。這些函式庫正積極地影響我們對軟體開發的想法。我們相信,還會有更多更有趣的DSL函式庫出現。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_832156.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

安装网站源码时提示:【写入配置失败,请检查***目录是否可写入!】 (已解决)

首先网站安装位置&#xff0c;可以百度查一查。 我的是阿里云服务器&#xff0c;位置是阿里云之前指定的路径&#xff0c;就直接拿来用了&#xff0c;具体文章参考这里&#xff1a;传送门。 然后一路绿灯&#xff0c;也没有什么服务没有开启的情况。不过这里&#xff0c;有个文…

免费抖音短视频素材网站分享

今天给大家分享抖音短视频的知识。 要做好短视频&#xff0c;拥有视频素材网站肯定是少不了&#xff0c;在我们日常的工作学习中也不免会用到一些视频素材。 今天给大家分享一些不错的无版权视频网站(部分需科学上网)&#xff0c;用好了&#xff0c;视频制作的成本将大大降低…

PCB封装库网站

https://www.snapeda.com/home/ https://componentsearchengine.com/index.html 在线EDA&#xff08;可以导出pcb和原件封装&#xff09; https://easyeda.com AD官网库&#xff08;新&#xff09; https://designcontent.live.altium.com/#UnifiedComponents AD官网库&#…

大型网站架构演化发展历程

大型网站系统的特点 1&#xff0c;高并发&#xff0c;大流量&#xff1a;需要面对高并发用户&#xff0c;大流量访问。 2&#xff0c;高可用&#xff1a;不间断服务。 3&#xff0c;海量数据&#xff1a;管理处理海量数据&#xff0c;使用大量服务器。 4&#xff0c;需求快…

android 程序开启启动监听端口,gogo电子竞技-官方网站

脱壳第三讲,UPX压缩壳,以及补充壳知识 一丶什么是压缩壳.以及壳的原理 在理解什么是压缩壳的时候,我们先了解一下什么是壳 1.什么是壳 壳可以简单理解为就是在自己的PE文件中包含了代码.而有不影响我们的PE文件的执行. 2.什么是压缩壳 压缩壳指的是让我们的PE文件变小. 3.压缩壳…

BFD基金服务器网站是真的吗,百度基金正式开售!服务器惨被挤爆惹吐槽

【PConline 资讯】10月28日消息&#xff0c;备受关注的百度理财产品百度百发于10月28日上午10:28正式发售。不过&#xff0c;由于访问量过大&#xff0c;百度理财官网一度无法正常登陆&#xff0c;引起网友吐槽。百度基金产品百发正式发售据介绍&#xff0c;百发是一款基金产品…

linux扫网站目录,Linux下CSF防火墙阻止恶意网站目录/文件扫描

如图&#xff0c;有时候我们检查Apache日记的时候会发现大量这样的单IP或多IP在短时间内请求大量不存在的目录/文件&#xff0c;Apache返回404状态&#xff0c;这不仅消耗服务器资源还可能有安全隐患。我们可以通过CSF防火墙解决&#xff0c;CSF可以根据返回状态次数来屏蔽请求…

js登录其他网站_JS逆向 | 某同城网站模拟登录(RSA)及指纹分析

点击上方“逆向新手”&#xff0c;选择“关注公众号”跟我一起学Python爬虫逆向&#xff01;声明&#xff1a;本文只作学习研究&#xff0c;禁止用于非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请告知删除&#xff0c;谢谢&#xff01;目标网站&#xf…

富文本editor赋值_基于SpringBoot从零构建博客网站-集成editor.md开发发布文章功能...

发布文章功能里面最重要的就是需要集成富文本编辑器&#xff0c;目前富文本编辑器有很多&#xff0c;例如ueditor&#xff0c;CKEditor、editor.md等。这里守望博客里面是集成的editor.md&#xff0c;因为editor.md是markdown格式&#xff0c;目前markdown由于简洁好用&#xf…

奇安信cdn配置教程_网站速度优化实战教程

网站的打开速度&#xff0c;可以说是seo优化过程中的第一步。因为你网站内容在丰富&#xff0c;质量在好&#xff0c;加载速度慢&#xff0c;别人没耐心等待&#xff0c;也是白搭。假如你不是专门的图片或视频网站&#xff0c;可以根据本教程对网站加载速度做优化&#xff0c;以…

vue 同一个域名移动端pc端两套代码跳转_移动端网站SEO优化排名的一些注意细节...

俗话说&#xff0c;有搜索的地方就有SEO优化&#xff0c;移动端的SEO优化也逐渐的进入火热化&#xff0c;对于移动端的SEO优化&#xff0c;大家都是处于同一个阶段&#xff0c;就看谁花在这上面的心思更多一些了。在优化移动端网页的时候&#xff0c;越来越多的问题开始出现&am…

网络不稳定的原因_网站排名不稳定原因有哪些?如何保持排名稳定性?

在互联网的发展旅途中&#xff0c;如果网站没有排名&#xff0c;一切都是浮云&#xff0c;因为80%用户在自身有需求时都会通过搜索手段来寻找解决途径&#xff0c;而排名靠后根本没有用户知道你的存在&#xff0c;更没有人会去大海捞针。所以&#xff0c;想要得到更多用户的关注…

税控盘查看服务器设置的网站,税控盘系统参数设置服务器设置

税控盘系统参数设置服务器设置 内容精选换一换如果您已经创建了一台Linux云服务器&#xff0c;并根据业务需要进行了自定义配置(如安装软件、部署应用环境等)&#xff0c;您可以为更新后的云服务器创建系统盘镜像。使用该镜像创建新的云服务器&#xff0c;会包含您已配置的自定…

mysql mha keepalive vip02安装配置,MHA的配置 - MySQL + MHA +Keepalive + VIP安装配置_服务器应用_Linux公社-Linux系统门户网站...

一、总概1、MHA介绍MHA(Master High Availability)是自动的master故障转移和Slave提升的软件包.它是基于标准的MySQL复制(异步/半同步).MHA有两部分组成:MHA Manager(管理节点)和MHA Node(数据节点).MHA Manager可以单独部署在一台独立机器上管理多个master-slave集群,也可以部…

华为外包评级5a多少钱_西安seo外包收费标准优化一个网站需要多少钱?

西安SEO外包优化一个网站需要多少钱&#xff1f;最近西安天勤网络营销工作室的企业微信和QQ不定时都会接到客户咨询西安SEO外包价格问题&#xff0c;西安SEO优化一个网站报价多少钱[1]&#xff0c;网站优化[2]一个营销型网站SEO外包需要多少钱?网站做一个词多少钱?或者是网站…

网站留言板防重复留言_企业网站建设

企业制作官网的目的1.有利于提升企业品牌形象 一般来说&#xff0c;企业建立自己的网站&#xff0c;不但可以给企业带来新客户、新生意&#xff0c;同时也可以通过网站来提升自己的品牌形象。2.可以全面详细地介绍公司及展示公司产品 公司网站的一个最基本的功能&#xff0c;就…

您访问的网页出错了! 网络连接异常、网站服务器失去响应_出现网页错误时,数字502、404等分别是什么意思?...

TFBOYS六周年了&#xff01;为了庆祝&#xff0c;他们将于8月10日在深圳体育馆举行“六周年演唱会”。这次演唱会官方售票网站在7月11日上午正式开通&#xff0c;但令粉丝们绝望的是&#xff0c;不仅抢票流程非常复杂&#xff0c;而且抢票网站还频繁出现“502错误”。502这三个…

未定义数组索引是什么意思_SEO是什么意思?什么是SEO /搜索引擎优化?

SEO是什么意思?什么是SEO /搜索引擎优化&#xff1f;SEO代表搜索引擎优化&#xff0c;这是通过自然搜索引擎结果增加网站流量的数量和质量的做法。什么是SEO什么是SEO&#xff1f;SEO代表“搜索引擎优化”。它是从搜索引擎上的“免费”&#xff0c;“有机”&#xff0c;“社论…

如何卸载服务器的php,centos如何完全卸载php_网站服务器运行维护,centos,php

centos7如何设置屏幕不休眠_网站服务器运行维护centos7设置屏幕不休眠的方法&#xff1a;1、依次点击【applications】、【syetem tools】、【settings】选项&#xff1b;2、进入【privacy】选项&#xff0c;找到【screen lock】选项&#xff0c;并开启此选项即可。查看全部的p…