Capistrano:自動完成多臺服務(wù)器上新版本的同步更新,包括數(shù)據(jù)庫的改變

      網(wǎng)友投稿 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

      Capistrano:自動完成多臺服務(wù)器上新版本的同步更新,包括數(shù)據(jù)庫的改變

      [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)容。

      上一篇:如何在Excel中按中間名對名稱排序?
      下一篇:制造業(yè)生產(chǎn)成本管理
      相關(guān)文章
      亚洲精品在线电影| 精品亚洲成a人片在线观看少妇| 亚洲欧洲日本精品| 亚洲网红精品大秀在线观看| 精品日韩亚洲AV无码| 亚洲一区二区影院| 99久久亚洲综合精品成人网| 亚洲日本在线看片| 亚洲综合久久成人69| 亚洲网站在线播放| 亚洲最大成人网色香蕉| 亚洲日韩国产精品乱-久| 亚洲综合av一区二区三区不卡| 亚洲欧洲日本在线观看| 亚洲人成人网毛片在线播放| 亚洲精品美女网站| 色偷偷噜噜噜亚洲男人| 亚洲 小说区 图片区 都市| 亚洲AV成人精品日韩一区18p| 亚洲?V无码成人精品区日韩| 久久国产成人亚洲精品影院 | 国产精品亚洲精品日韩已方| 中文字幕第一页亚洲| 亚洲人成伊人成综合网久久久 | 亚洲一本一道一区二区三区| 亚洲午夜成人精品无码色欲| 亚洲成a∧人片在线观看无码| 亚洲AⅤ视频一区二区三区 | 亚洲噜噜噜噜噜影院在线播放| 亚洲香蕉久久一区二区三区四区| 亚洲人成人无码.www石榴| 国产精品亚洲专区无码唯爱网 | 亚洲人成影院77777| 亚洲熟伦熟女专区hd高清| 国产精品亚洲专区无码不卡| 狠狠亚洲狠狠欧洲2019| 亚洲国产第一页www| 亚洲综合色7777情网站777| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲国色天香视频| 亚洲欧洲av综合色无码|