freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

rails敏捷開(kāi)發(fā)3(編輯修改稿)

2025-06-19 18:28 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 探究竟。depot ruby script/performance/profiler 39。(secret,salt)39。Loading Rails...Using the standard Ruby profiler.% cumulative self self totaltimesecondssecondscallsms/callms/callname1Integertimes1000000112Symbolto_sym...1Hashupdate這很奇怪:大半的時(shí)間似乎都被耗在times()和sin()方法上了。我們來(lái)看看源代碼:def (password, salt) { (1)} string_to_hash = password + salt Digest::(string_to_hash)end哎喲!頂上的那個(gè)循環(huán)是我在進(jìn)行某個(gè)手工測(cè)試時(shí)加上的,以便讓程序運(yùn)行得慢一點(diǎn),然后我就忘了在部署之前把它去掉。我一定是忘了給自己留下一張小紙條……最后,別忘了日志文件。如果你需要了解與時(shí)間相關(guān)的信息,它們能夠提供大量寶貴的信息。 使用Mock對(duì)象Using Mock Objects未來(lái)的某個(gè)時(shí)候,我們肯定需要在Depot應(yīng)用中加上一些代碼,以便真正收到來(lái)自顧客的付款。所以,假設(shè)我們已經(jīng)搞定了所有那些文案工作,并可以把那些信用卡數(shù)字變成我們銀行賬戶上實(shí)實(shí)在在的錢了。然后,我們創(chuàng)建了一個(gè)PaymentGateWay類(位于lib/),它可以和負(fù)責(zé)處理信用卡的網(wǎng)關(guān)交互。最后,我們?cè)赟toreController的save_order()這個(gè)action中添加下列代碼,就可以讓Depot應(yīng)用處理信用卡了。gateway = response = (:login = 39。username39。 , :password = 39。password39。 , :amount = @, :card_number = @, :expiration = @, :name = @)當(dāng)collect()方法被調(diào)用時(shí),這些信息會(huì)通過(guò)網(wǎng)絡(luò)發(fā)送給后端的信用卡處理系統(tǒng)。這對(duì)于我們的錢包有好處,但對(duì)于功能測(cè)試就不那么好了,因?yàn)檫@樣一來(lái),StoreController就必須能夠連接到真正的信用卡處理系統(tǒng)才行。而且,即便網(wǎng)絡(luò)連接和信用卡系統(tǒng)都不成問(wèn)題,我們也不能每次運(yùn)行功能測(cè)試就提交一堆信用卡交易事務(wù)。所以,我們并不想真的用PaymentGateWay對(duì)象進(jìn)行測(cè)試,而是想用一個(gè)mock對(duì)象來(lái)替換它。在mock的幫助下,測(cè)試就不必依賴于網(wǎng)絡(luò)連接,從而確保結(jié)果的一致性。還好,Rails讓對(duì)象的模擬替換也易如反掌。為了在測(cè)試環(huán)境模擬collect()方法,我們只需要在test/mocks/。下面就來(lái)看看這個(gè)名字中的奧妙吧。首先,文件名必須與試圖替換的文件名相同。我們可以模擬模型、控制器或者庫(kù)文件:唯一的要求就是文件名必須相同。第二,看看占位文件的路徑,我們將它放在了test/mocks目錄的test子目錄下,這個(gè)子目錄用于存放所有用于測(cè)試環(huán)境的占位文件。如果我們希望在開(kāi)發(fā)環(huán)境中替換某些文件,就應(yīng)該將占位文件放在test/mocks/development目錄下?,F(xiàn)在,看看占位文件本身。require 39。lib/payment_gateway39。class PaymentGateway I39。m a stubbed out method def collect(request) true endend請(qǐng)注意,占位文件實(shí)際上加載了原來(lái)的PaymentGatway類(通過(guò)調(diào)用require()方法),然后對(duì)其進(jìn)行了修改,覆蓋了其中的collect()方法。也就是說(shuō),我們不必模擬出PaymentGateway的所有方法,只需要修改那些運(yùn)行測(cè)試時(shí)有必要修改的方法即可。在這里,修改后的collect()方法直接返回一個(gè)偽造的應(yīng)答信息。有了這個(gè)文件以后,StoreController就會(huì)試用我們模擬出來(lái)的PaymentGateway類。之所以如此,是因?yàn)镽ails把mock路徑放在整個(gè)搜索路徑的最前面,因此它會(huì)加載test/mocks/test/。這就是全部了。使用占位程序,我們可以集中注意力來(lái)測(cè)試最重要的東西,而Rails則讓這一切變得無(wú)比輕松。Stub vs.Mock也許你已經(jīng)注意到了,在前面我們一直用占位(stub)這個(gè)詞來(lái)稱呼那些用于模擬真實(shí)的類和方法,但Rails卻把它們放在test/mocks子目錄下。在這一點(diǎn)上,Rails確實(shí)有些不太注意用詞,這里所說(shuō)的mock實(shí)際上只是占位程序:它們是偽造出的代碼塊,用在測(cè)試中以避免用到某些資源。不過(guò),要是你真的想使用mock對(duì)象——用于檢查“程序如何使用某些對(duì)象”的對(duì)象——Rails也能夠滿足你。,Rails包含了Flex Mock —Jim Weirich的Rubymock對(duì)象庫(kù)。在所有測(cè)試中都可以使用這個(gè)庫(kù),不過(guò)你需要明確導(dǎo)入它:require flexmock我們做了了什么What We Just Did我們?yōu)镈epot應(yīng)用寫了一些測(cè)試,但并沒(méi)有測(cè)試到所有東西。然而,我們現(xiàn)在知道,確實(shí)可以測(cè)試所有東西。實(shí)際上,Rails對(duì)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)提供了絕佳的支持,可以幫助你寫出更好的測(cè)試。盡早、盡可能頻繁地進(jìn)行測(cè)試——你可以在投入正式運(yùn)行之前找到bug.你的設(shè)計(jì)會(huì)得到改善,你的Rails應(yīng)用會(huì)因此而感謝你。 第3部分 Rails框架Part III The Rails Framework第15章深入RailsRails in Depth Depot項(xiàng)目已經(jīng)搞定了,現(xiàn)在正是深入研究Rails的好時(shí)機(jī)。在本書(shū)的剩下部分里,我們將一個(gè)主題一個(gè)主題地——或者說(shuō),一個(gè)模塊一個(gè)模塊地——探索Rails。本章將為讀者拉開(kāi)大幕。在這一章里,我們將從較高的層面向讀者介紹一些必要的指示:目錄結(jié)構(gòu)、配置、環(huán)境、支撐類,以及調(diào)試提示。不過(guò)首先,我們必須回答幾個(gè)重要的問(wèn)題…… Rails在哪兒So,Where39。sRails?Rails的一個(gè)有趣之處在于它的組成方式。從開(kāi)發(fā)者的角度,你所有的時(shí)間都是在跟ActiveRecord或是ActionView這些高層的東西打交道。這里確實(shí)有一個(gè)名叫Rails的組件,不過(guò)它位于所有其他組件之下,默默地安排協(xié)調(diào)著它們的工作。要是沒(méi)有Rails組件,就不會(huì)有前面這個(gè)成功的Depot應(yīng)用。但與此同時(shí),Rails的底層基礎(chǔ)設(shè)施只有很少一部分與開(kāi)發(fā)者的日常工作相關(guān),在本章的余下篇幅里,我們就要介紹這些部分。 目錄結(jié)構(gòu)DirectoryStructureRails要求一個(gè)特定的運(yùn)行時(shí)目錄結(jié)構(gòu)。 my_app命令生成的頂級(jí)目錄結(jié)構(gòu)。我們看看每個(gè)目錄中都放了什么東西(不過(guò)不一定按順序來(lái))。config和db這兩個(gè)目錄值得花一點(diǎn)時(shí)間來(lái)介紹,所以我們?yōu)樗鼈兎謩e準(zhǔn)備了一小節(jié)的篇幅。頂層目錄下還有一個(gè)Rakefile文件,你可以使用它來(lái)運(yùn)行測(cè)試、創(chuàng)建文檔、生成數(shù)據(jù)庫(kù)結(jié)構(gòu),等等。在命令行輸入rake tasks就可以看到完整的任務(wù)列表。 rails my_app命令的結(jié)果app/和test/我們的工作大多在app和test這兩個(gè)目錄中進(jìn)行。應(yīng)用程序的主要代碼都位于app目錄()。在稍后詳細(xì)討論ActiveRecord、ActionController和ActionView的時(shí)候,我們還會(huì)深入介紹app目錄的內(nèi)部結(jié)構(gòu)。此外,在第14章“任務(wù)T:測(cè)試”(第177頁(yè))中,我們已經(jīng)介紹過(guò)test目錄了。 app/目錄doc/doc目錄是用來(lái)存放文檔——RDoc自動(dòng)生成的文檔的。如果你運(yùn)行rake doc:app命令,在doc/app目錄下就會(huì)有HTML格式的文檔。你可以編輯doc/README_FOR_APP文件,為自己的文檔定制一個(gè)首頁(yè)。“在線商店”應(yīng)用的文檔首頁(yè)。lib/lib目錄用于存放那些不屬于模型、視圖和控制器的應(yīng)用代碼。譬如說(shuō),你可能編寫了一個(gè)庫(kù)用于創(chuàng)建PDF格式的收據(jù)以便顧客下載1 我們?cè)谛掳娴腜ragmatic Programmer在線商店中就是這樣做的。,控制器會(huì)直接用send_data()方法將收據(jù)發(fā)送給瀏覽器。此時(shí),用于創(chuàng)建PDF收據(jù)的代碼就很自然地位于lib目錄下。lib目錄還很適合放置模型、視圖和控制器之間共享的代碼。譬如說(shuō)你可能需要用一個(gè)庫(kù)來(lái)檢查信用卡號(hào)的校驗(yàn)和,或是執(zhí)行某些財(cái)務(wù)計(jì)算,或是計(jì)算復(fù)活節(jié)的日期* 譯者注:復(fù)活節(jié)是3月21日或其后月滿之后的第一個(gè)星期天,因此是需要計(jì)算的。簡(jiǎn)而言之,任何不直接屬于模型、視圖或者控制器的代碼都應(yīng)該放在lib目錄下。也許你會(huì)想,只能把一大堆文件直接放在lib目錄下嗎?不必?fù)?dān)心。大部分Rails開(kāi)發(fā)者都會(huì)在lib目錄下創(chuàng)建子目錄,以便將不同功能的代碼分組存放。譬如在Pragmatic Programmer在線商店中,用于生成收據(jù)、報(bào)關(guān)文件和其他PDF文檔的代碼都放在lib/pdf_stuff目錄下。將文件放到lib目錄下之后,你就可以在應(yīng)用程序的任何地方使用它們。如果文件中包含了類或者模塊的定義,并且文件名是類名或者模塊名的小寫格式,那么Rails就會(huì)自動(dòng)裝載這個(gè)文件。譬如說(shuō)生成PDF收據(jù)的代碼位于lib/pdf_stuff/,那么只要這個(gè)類名叫PdfStuff::Receipt,Rails就能夠找到并自動(dòng)裝載它。如果庫(kù)的命名不符合這些自動(dòng)裝載的條件,也可以通過(guò)Ruby的require機(jī)制引用它們。如果要引用1ib目錄下的文件,只需要直接引用文件名。譬如說(shuō),假設(shè)計(jì)算復(fù)活節(jié)日期的庫(kù)位于lib/,我們就可以在任何模型、視圖或者控制器中使用下列代碼引用它:require easter如果庫(kù)位于lib目錄中的子目錄,別忘了在require語(yǔ)句中包含目錄名。譬如說(shuō)如果要在控制器中引用“計(jì)算航空郵件費(fèi)用”的庫(kù),就需要使用下列代碼:require shipping/airmailRake任務(wù)RakeTasks在lib目錄下還有一個(gè)空的tasks目錄,你可以在其中編寫自己的Rake任務(wù),用于給自己的項(xiàng)目實(shí)現(xiàn)自動(dòng)化功能。這本書(shū)不是關(guān)于Rake的,所以我們不打算深入這部分內(nèi)容,只給大家看一個(gè)簡(jiǎn)單的例子好了。Rails 提供了一個(gè)Rake任務(wù)用來(lái)告訴我們最后執(zhí)行的是哪個(gè)遷移任務(wù)。但如果能夠看到被執(zhí)行過(guò)的遷移任務(wù)的列表可能更好。But it may be helpful to see a list of all the migrations that have been performed.我們可以編寫一個(gè)Rake任務(wù)來(lái)打印schema_migration表中的版本清單。Rake任務(wù)完全用Ruby代碼寫出。Download depot_r/lib/tasks/namespace :db do desc Prints the migrated versions task :schema_migrations = :environment do puts ActiveRecord::( 39。select version from schema_migrations order by version39。 ) endend然后就可以在命令行執(zhí)行這個(gè)任務(wù),就像執(zhí)行其他Rake任務(wù)一樣。depot rake db:schema_migrations(in /Users/rubys/Work/...)20080601000001200806010000022008060100000320080601000004200806010000052008060100000620080601000007更多關(guān)于“如何編寫Rake任務(wù)”的信息,請(qǐng)參閱Rake文檔:。log/在Rails運(yùn)行的過(guò)程中,它會(huì)生成很多有用的日志信息,這些信息(默認(rèn)情況下)被保存在log目錄下。在這里我們可以找到三個(gè)主要的日志文件,、。這些日志文件不僅包含簡(jiǎn)單的日志跟蹤信息,還包含時(shí)間統(tǒng)計(jì)信息、緩存信息和實(shí)際執(zhí)行的數(shù)據(jù)庫(kù)語(yǔ)句等。日志記入哪個(gè)文件,取決于應(yīng)用程序運(yùn)行于哪個(gè)環(huán)境——關(guān)于運(yùn)行環(huán)境,我們?cè)诮榻Bconfig目錄時(shí)還會(huì)深入討論。public/public目錄是應(yīng)用程序的“臉面”:web服務(wù)器會(huì)把這個(gè)目錄作為應(yīng)用程序的根目錄。大部分部署配置的工作都在這里進(jìn)行,所以我們將在第27章“部署與生產(chǎn)”(第615頁(yè))中介紹它。scripts/scripts目錄中存放了一些有用的工具程序。不加參數(shù)運(yùn)行這些腳本就可以看到它們各自的用法。about顯示應(yīng)用程序所使用的Ruby和Rails各組件的版本號(hào),以及別的配置信息。dbconsole可以讓你通過(guò)命令行和數(shù)據(jù)庫(kù)直接交互。console讓你可以用irb與Rails應(yīng)用中的方法交互。destroy刪除用generate工具生成的文件。generate代碼生成器,內(nèi)建支持創(chuàng)建控制器、郵件發(fā)送器(mailer)、模型、腳手架和web service。你也可以從Rails網(wǎng)站 下載其他的代碼生成模塊。不帶參數(shù)運(yùn)行g(shù)enerate可以得到相關(guān)生成器的用法說(shuō)明。譬如:
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1