× 說心事 政治時事 生活 運動 汽車 機車 自行車 相機 科技 理財 旅遊美食 娛樂 健康 美麗時尚 人際關係 文學故事 關於《思書》
吃喝玩樂 關於《思書》


Capistrano: 設定 shared link 分享目錄


紅寶鐵軌客
來關注...
關注:紅寶鐵軌客
關注有什麼好處?:當作者有新文章發佈時,「思書日報」就會匯總自動通知您,讓您更容易與作者互動。
x
紅寶鐵軌客
Rails 使用中,折磨中,享受中......
Victorian vintage round cut ruby engagement ring in 14k yellow gold 7mm center vs g h 984
    很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
     
    就,這會一點點,那會一點點⋯⋯
作者最新發佈的文章:
  • Rails 如何過濾你要的 HTML tag 內容
  • 要用 Faraday 還是 Net HTTP 呢?
  • Rails 如何檢查 URL 是否存在?
作者最近參與的討論:
  • Rails 常見資安陷阱與解決方法
現在就加入《思書》,你就可以關注本作者了!
《思書》是一個每個人的寫作與論壇平台,特有的隱私管理,讓你寫作不再受限,討論更深入真實,而且免費。 趕快來試試!
還未加入《思書》? 現在就登錄! 已經加入《思書》── 登入
Rails 使用中,折磨中,享受中......
2017/11/17
40   0  


前天,很高興的寫的廣告控制的後台,就快樂的上線了,寫完,當然也有好好的試過,上線後,用戶也用得很高興,就這樣,我又繼續寫其他的案子,但是今天一早,用戶就告訴我說,上傳的照片看不到了,我直覺的就是,好煩啊,一定是你自己沒上傳好,但是用戶最大,還是乖乖的上線看看,咦,真的很奇怪,有照片檔的名稱與連結,但是,照片檔不見了,哈,我的錯,我忘了設定 Capistrano 的 share 連接目錄了。

當時在寫程式時,新增了一個用戶目錄給用戶上傳檔案用,寫完測試沒問題,但是用戶上傳檔案後,如果我又用 Capistrano 更新程式,bundle exec cap production deploy,舊的檔案就會被移到備份,而新的程式目錄則會完全來自新開發上傳的檔案,這一點問題都沒有,但是用戶的資料一定會不見,實務上使用,用戶的資料,不是在資料庫中的,就必須要存在另一個獨立不會被更新的目錄中,這我都知道,但是,寫的時候,想說等一下再設定,就忘了,而這種問題,驗證程式也找不到問題的,所以,就特寫此文,以茲紀念,我想沒人會跟我一樣無腦啦。

在 Capistrano 中,有一個很方便的設定連接目錄方法,在 deploy.rb 中,只要加入這一行,就會自動幫我們設好連結目錄,很簡單,只要將要連結的目錄寫進以下這行就好。

set :linked_dirs, %w{public/uploads tmp/pids log public/flags}

在這個設定中,就指定了:public/uploads,tmp/pids, log,public/flags 四個連結目錄,連結的目錄基本上,如果不變動,沒特別指定,好像也沒人要改變它,就會是在 deploy 目錄下叫做 shared,這個 Capistrano 設定真的很簡單,就把要連結的目錄加上去就好了,以新增一個 public/flags 的連接目錄來說:

  1. 就把它加到 set :linked_dirs 上的大括弧中去,如上面。
  2. 在 server 的 deploy 目錄下,新增一個 public/flags 的目錄,就是:mkdir public/flags

這樣就好了,真簡單。

那到底 capistrano 做了什麼事呢?在執行更新:bundle exec cap production deploy 後,我們可以在 log 中看到以下:

00:08 deploy:symlink:linked_dirs
     ....
      02 rm -rf /home/deploy/apps/new_app/releases/20171117062426/public/flags
    ✔ 02 deploy@192.168.100.200 0.138s
      03 ln -s /home/deploy/apps/new_app/shared/public/flags /home/deploy/apps/new_app/releases/201711…

所以謎底揭曉, Capistrano 會先把上傳新增到 server 的 public/flags 目錄刪掉,再建立一個連結到 shared/public/flags,很標準的一個做法,在實務上,我們還要記得把 public/flags 加到 .gitignore 中,沒加也沒差啦,但是只是傳上去,也是被殺掉,浪費時間頻寬。

就這樣,特寫此文,紀念我的笨錯誤。 

關於作者
很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
 
就,這會一點點,那會一點點⋯⋯


標籤: 分享目錄設定 x 1 linked_dirs x 1 capistrano x 1 rails x 29

分享:


參與討論!
x
現在就加入《思書》,馬上參與討論!
《思書》是一個每個人的寫作與論壇平台,特有的隱私管理,用筆名來區隔你討論內容,讓你的討論更深入,而且免費。 趕快來試試!
還未加入《思書》? 現在就登錄! 已經加入《思書》── 登入