【云圖說】第132期 小云妹帶您快速玩轉(zhuǎn)RDS實例操作(2)——刪除與退訂
829
2025-04-01
https://baike.baidu.com/item/Capistrano/6844928?fr=aladdin
Capistrano是一種在多臺服務(wù)器上 運行腳本的開源工具,它主要用于部署web應(yīng)用。它自動完成多臺服務(wù)器上新版本的同步更新,包括數(shù)據(jù)庫的改變。
目錄
1 基本信息
2 其他信息
基本信息
Capistrano最初由Jamis Buck用 Ruby開發(fā),并用 RubyGems部署渠道部署。現(xiàn)在Capistrano不僅限于應(yīng)用Ruby on Rails的 web應(yīng)用框架,而且可以用于部署用其他框架的web應(yīng)用程序,比如用 PHP開發(fā)的。Capistran最初是用來應(yīng)用于bash指令行。現(xiàn)在Ruby on Rails框架的用于也可以使用它的新特性,例如,對當前web應(yīng)用部署改變使其更新版本,或者使其回滾到之前的舊版本。
應(yīng)用平臺 POSIX ( Linux, OpenBSD, Mac OS X)
類型 Deployment Tool
License MIT
Capistrano是一種通過 ssh向多個服務(wù)器部署web應(yīng)用的一種框架和工具。它使用一種簡單的Domain Specific Language,這種語言是從工具rake中部分借用過來的,Rake的作用類似C語言中的make工具,允許你定義任務(wù),這些任務(wù)也許用于某些特定角色的服務(wù)器。同時它還允許你透過網(wǎng)關(guān)在 防火墻和VPN之后執(zhí)行任務(wù)。
當您完成了Rails 2.x應(yīng)用后,是時候用到Capistrano了,它可以很容易的幫您自動向多臺服務(wù)器同步部署應(yīng)用。Capistrano的安裝也很簡單,只需要gem install capistrano即可。在我們有效地設(shè)置Capistrano之前,我們必須做好應(yīng)用部署相關(guān)的決定,Capistrano可不能幫你解決這些問題。但是Capistrano的默認設(shè)置足以解決大部分問題。
web服務(wù)器軟件
首先我們需要安裝web 服務(wù)器軟件,可以選擇的有 Apache, Lighttpd, 和 nginx 如果沒有特別需求,可以選擇 nginx,小巧而高效。
數(shù)據(jù)庫
然后是數(shù)據(jù)庫,你需要決定你的產(chǎn)品需要那款 數(shù)據(jù)庫軟件,MySQL 和 postgresql是兩個不錯的開源選擇,即使大公司更傾向使用Oracle。有些人會選擇使用 SQLite,他很適合單用戶的嵌入式環(huán)境,但卻不適合web環(huán)境。在這些選擇中,MySQL通常來說是最容易安裝和設(shè)置的,所以此處推薦MySQL。
Ruby
然后是Ruby,Ruby對任何Rails應(yīng)用來說都非常關(guān)鍵,你需要決定你要安裝Ruby的版本和 插件。這些年 JRuby也能跑 Rails,但是如果你決定用JRuby來代替MRI Ruby來部署的話,你的設(shè)置環(huán)節(jié)可能需要較大的改變。
應(yīng)用層
應(yīng)用層是實際運行你的web應(yīng)用的環(huán)節(jié)。Mongrel是個很流行的選擇,而Thin and Passenger (例如 mod_rails)也變得越來越流行。有的人會嘗試使用WEBrick來部署產(chǎn)品,但并不推薦使用它,WEBrick用于應(yīng)用的開發(fā)和測試還是不錯的,但要用于大規(guī)模部署產(chǎn)品的生產(chǎn)環(huán)境可能就不太好。還需要注意的是,如果你使用Passenger之類的話,你需要確保你的 web服務(wù)器軟件支持他,Passenger只支持Apache2和 nginx。
版本控制
雖然版本控制系統(tǒng)跟產(chǎn)品部署的設(shè)置沒什么關(guān)系,但是在默認設(shè)置下,Capistrano很大程度上依賴你的版本控制系統(tǒng)。Capistrano支持的版本控制系統(tǒng)比較少,要支持更多的版本控制系統(tǒng),你需要做更多地工作。最常見的 Subversion和 Git都能得到很好的支持,最易選一個你用的慣的它也支持的版本控制系統(tǒng)。
接下來我們按照如順序配置
nginx
MySQL
MRI Ruby
Mongrel
Subversion
Capification
安裝完Capistrano之后要做的第一件事就是"capify"你的應(yīng)用,這個過程是設(shè)置Capistrano來部署你的應(yīng)用,很簡單,只需在你的應(yīng)用的root目錄里執(zhí)行capify .(即capify+" "+ ".")。這將產(chǎn)生兩個文件,一個是capfile,這個是Capistrano需要的主要文件,就像make自動產(chǎn)生 makefile,rake自動產(chǎn)生Rakefile一樣,Capistrano默認尋找并加載capfile文件,默認產(chǎn)生的rapfile非常小,它所做的事就是加載“ config/deploy.rb";第二個文件是"config/deploy.rb",這個文件包含你的應(yīng)用程序部署所需的設(shè)置。Ralis的所有設(shè)置文檔都放在config目錄下,通常,你不需要管capfile文件,只需要把精力放在config/deploy.rb的設(shè)置和優(yōu)化上。如果你的Capistrano用于非 Rails環(huán)境,你可能只有一個capfile文件,而沒有 config/deploy.rb這個文件。
Configuration
設(shè)置,如果你看看config/deploy.rb的內(nèi)容,你就會發(fā)現(xiàn),里面沒多少可設(shè)置的東西。首先我們要告訴Capistrano我們的應(yīng)用程序被"調(diào)用"了
set: application, "your_application_name"
然后我們需要告訴Capistrano我們的源代碼在哪里,這個地址你的 本地主機和服務(wù)器都可以到達。
set :repository, "svn+ssh://code#######/repos/your_application_name"
然后,如果你用的不是 Subversion,你還需要告訴Capistrano你使用的版本控制系統(tǒng):
set : scm, :git
部署目錄結(jié)構(gòu)
一次成功的部署將會產(chǎn)生如下 文件目錄結(jié)構(gòu):
[deploy_to]
[deploy_to]/releases
[deploy_to]/releases/20080819001122
[deploy_to]/releases/...
[deploy_to]/shared
[deploy_to]/shared/log
[deploy_to]/shared/pids
[deploy_to]/shared/system
[deploy_to]/current -> [deploy_to]/releases/20100819001122
(deploy_to代表你想讓Capistrano在你的服務(wù)器部署的位置)
每部署一次,將在 release目錄下產(chǎn)生新的目錄,然后新版本將在部署在那里。然后"current"鏈接將指向新產(chǎn)生的目錄.
還需要注意的是,設(shè)置你的web 服務(wù)器軟件時要在相應(yīng)的root目錄下執(zhí)行。
回到設(shè)置上來
接下來回到設(shè)置Capistran上來。我們需要告訴Capistran我們的應(yīng)用放在服務(wù)器的哪里。默認是在"/u/apps/#{application}"。但是你也許想在/var/www上部署,這就需要這樣設(shè)置:
set :deploy_to, "/var/www"
然后在告訴Capistrano我們的服務(wù)器在哪兒,各自都起到什么作用:
role :app, "tutorial#com"
role :web, "tutorial#com"
其他信息
role :db, "tutorial#com", :primary => true
如果只有一個服務(wù)器,就這樣設(shè)置:
server "tutorial#com", :app, :web, :db, :primary => true
app,web,db是Capistrano需要的三種角色:
web:你的 服務(wù)器軟件運行的地方;
app:你的應(yīng)用層運行的地方;
db:遷移運行的地方;
雜項配置
以上的設(shè)置對大部分人來說已經(jīng)足夠了,下面是額外的附加設(shè)置,如果你確實需要的話:
set :user, “foo”如果你你登錄的用戶名與你登錄本地的用戶名不一致,你需要告訴Capistrano你的用戶名;
set :scm_username, “foo”如果你登錄你的 源代碼庫時使用的用戶名與你登錄本地的用戶名不一致時,你需要告訴Capistrano。注意到并不是所有的版本控制系統(tǒng)都支持scm_username變量,你可能需要在你的庫中嵌入scm_usernam:e.g. “svn+ssh://#{scm_username}@foo.bar#com/path/to/repo”
set :use_sudo, false,在默認情況下,Capistrano會嘗試使用 sudo即管理員權(quán)限執(zhí)行命令,在你不具備sudo權(quán)限的時候,這可能會是個問題,需要引起足夠注意。
與Capistrano會話
設(shè)置完成之后,我們可以”問問“Capistrano一些問題,看看基本信息:
$ cap -h 顯示Capistrano自身相關(guān)信息;
$ cap -H 顯示更多信息;
$ cap -T 顯示tasks
設(shè)置服務(wù)器
開始正常工作之前,我們需要讓Capistrano建立基本的目錄樹:
$ cap deploy:setup
檢查依賴性:
$ cap deploy:check我們在相應(yīng)的位置新建了相應(yīng)的目錄結(jié)構(gòu),然后我們需要讓Capistrano所需的依賴關(guān)系是否都得到滿足
數(shù)據(jù)庫初始化
接下來是要確定數(shù)據(jù)庫已經(jīng)準備好了,安裝設(shè)置完之后,還需要確認一下三件事:
1)你是否已經(jīng)為你的部署新建了數(shù)據(jù)庫?
2)你是否已經(jīng)為你的 config/database.yml文件添加了相應(yīng)的部分?
3)你是否為你的數(shù)據(jù)庫設(shè)置了足夠的權(quán)限?
Capistrano啟動應(yīng)用層之前,他首先會執(zhí)行script目錄下的spin腳本,腳本內(nèi)容如下:
#!/bin/sh
#{deploy_to}/current/script/process/spawner \
mongrel \
--environment=production \
--instances=1 \
--address= 127.0.0.1 \
--port=#{port}
把#{deploy_to}對換成相應(yīng)的完整路徑
#{port}是你想讓mongrel監(jiān)聽的端口
接下來就該部署了
$ cap deploy:update
這個指令將把你的 源代碼復(fù)制到你的服務(wù)器上,然后把current這個鏈接更新到最新的目錄下。但是這會兒還沒正式啟動應(yīng)用層。這一步成功之后,就會登錄到你的服務(wù)器,然后把當前目錄定位到你的新版本里,即[deploy_to]/current,首先上載數(shù)據(jù)庫架構(gòu)到數(shù)據(jù)庫里:
$ rake RAILS_ENV=production db: schema:load
如果這一步成功完成,可以用下面的指令來測試下:
$ script/console production
如果測試成功,會產(chǎn)生如下 命令提示符:
>> app.get("/")
最后,啟動應(yīng)用層,看看動態(tài)內(nèi)容是否被成功加載:
$ cap deploy:start
這將會冷啟動應(yīng)用層,這個過程中使用了上述spin腳本
重啟和重新部署
$ cap deploy:restart
然后正式部署:
$ cap deploy
web前端 數(shù)據(jù)庫
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。