Your posts match “ deploy ” tag:

Mina 初體驗

從以前到現在 capistrano 一直都是我用來 deploy Rails application 的首選,原因是社群都這麼做所以我也就這麼做了,在那個只要下 cap deploy 就能把放在 git repo 上的 source code 變成能夠運作的網站,那一份感動真的是無法言喻。

然而, capistrano 的設定真的是太難搞了 ... 常常都讓我要搞上接近一天的時間才可以正常的把東西給 deploy 上去 (而且還有爛掉的可能),所以在不久之前我發現到了 Capistrano 3 的存在,一接觸我就愛上第二版的 Capistrano 了 ...

新的 DSL 設定、更簡單的方式就可以把網站部署起來 ... 真的感覺到 Capistrano 3 真的是 Good Job 啊!

然而就在昨天晚上, Ga Dii 鼓吹我嘗試 Mina 這一套很年輕的 deploy 工具後,我發現我似乎回不去 Capistrano 的懷抱了 ...

安裝

gem i mina

初始化

mina init

指令基本上沒太多差別,只是原本在 Capistrano 用 capify 的改用 mina init 而已,會產生一個在 config 資料夾下的 deploy.rb

設定

Mina 的設定檔感覺起來更容易理解,然後記得如果你有用 rvm 或 rbenv 的話要把 require 'mina/rvm'require 'mina/rbenv' 給取消註解,然後如果是 rvm 的話還要在

task :environment do
  # If you're using rbenv, use this to load the rbenv environment.

  # Be sure to commit your .rbenv-version to your repository.

  # invoke :'rbenv:load'


  # For those using RVM, use this to load an RVM version@gemset.

  invoke :'rvm:use[ruby-2.1.0@default]'
end

指定你的 gemset ,不然會噴錯誤。

自己的 task

不明原因讓我沒辦法在讓 mina 部署的過程中讀取到 env variables ,所以參考了一些網路資料得到這樣的做法:

task :env do                                                                                                                                                                                                
  queue %{
    echo "-----> Loading environment"
    #{echo_cmd %[source ~/.bash_profile]}
  }
end

task :deploy => :environment do
  invoke :env
  
  deploy do
    # 預設的 code

  end
end

如此一來就能夠在 deploy 之前先讀取環境設定檔

deploy

mina deploy

好處?

說真的,速度我覺得應該快上兩倍有 ... 傳說是因為 mina 只用了一條 ssh 連線的關係,但是實際上是怎樣我就不太清楚了。

缺點?

現在比較麻煩的是還沒有像是 unicorn 的套件可以使用,所以啟動伺服器我是手動連進去執行 bundle exec unicorn_rails -E production -c config/unicorn/production.rb -D 的方式執行,之後可能自己寫一個 mina/unicorn 來用。

參考資料

nginx 筆記

部署好後我忘記在 nginx 設定檔內關於 assets 路徑中設定 root ,所以變成會找不到 css / javascript files ,只要有設定好 root 是在 /home/deploy/xxx/current/public 的話就可以解決此問題