Deploy Rails App With Mina

原文请见我另外一个博客:http://caok1231.com/blog/2013/03/20/deploy-rails-app-with-mina/

capistrano是使用的最多的部署工具,最近社区中不少人开始推荐mina,试着用了下部署的速度的确快了很多。虽然mina最近两个月都没有更新,不过仍然希望这个项目能得到很好的发展。

下面简单总结下使用mina简单部署rails应用的过程。

1.安装mina

Gemfile中

group :development do

  gem 'mina', :git => 'git://github.com/nadarei/mina.git'

end

使用mina 0.2.1的时候可能会出现Mina hangs after entering SSH password, 而0.2.0的版本没有这个问题,但为了使用最新的版本可以直接从原项目中取(这样的话在执行mina命令时要加上bundle exec).

2.初始化mina

bundle

bundle exec mina init

它将创建部署文件config/deploy.rb

3.创建你的服务器

$ ssh [email protected]

# Once in your server, create the deploy folder:

[email protected]$ mkdir /var/www/foobar.com

[email protected]$ chown -R username /var/www/foobar.com

这样可以避免部署时出现的sudo的错误

4.配置mina

config/deploy.rb

require 'mina/bundler'

require 'mina/rails'

require 'mina/git'

require 'mina/rbenv'  # for rbenv support. (http://rbenv.org)

# require 'mina/rvm'    # for rvm support. (http://rvm.io)

set :domain, 'foobar.com'                 # 设置你的ip地址或域名

set :deploy_to, '/var/www/foobar.com'     # 设置部署的路径

set :repository, 'git://...'              # git地址

#set :repository, File.expand_path('../../.git/', __FILE__)  #直接取本地的git项目

set :branch, 'master'                     # 确定代码分支

# 设置需要共享的文件

set :shared_paths, ['config/database.yml', 'log', 'tmp']

# 可选设置

set :user, 'foobar'    # SSH 用户名.

# set :port, '30000'   # SSH 端口,默认22.

# 设置对于大多数的命令(mina deploy或mina rake)都需要预先加载的环境

task :environment do

  # 如果使用的是rbenv,这么设置,但需确保.rbenv-version(rbenv local 1.9.3-p374)已经存在于你的项目中

  invoke :'rbenv:load'

  # 如果使用rvm,可以这样加载一个RVM version@gemset

  # invoke :'rvm:use[ruby-1.9.3-p374@default]'

end

# mina setup 时会执行的操作

task :setup => :environment do

  queue! %[mkdir -p "#{deploy_to}/shared/log"]              # 创建日志目录

  queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/log"]      # 设置日志目录权限

  queue! %[mkdir -p "#{deploy_to}/shared/config"]           # 创建配置目录

  queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/config"]   # 设置配置目录权限

  # 生成服务器的database.yml

  queue! %[cd #{deploy_to}/shared && git archive --remote=#{repository} #{branch} config | tar -x config/database.yml]

end

# 进行mina deploy会进行的操作

desc "Deploys the current version to the server."

task :deploy => :environment do

  deploy do

    # Put things that will set up an empty directory into a fully set-up

    # instance of your project.

    invoke :'git:clone'

    invoke :'deploy:link_shared_paths'

    invoke :'bundle:install'

    invoke :'rails:db_migrate'

    invoke :'rails:assets_precompile'

    to :launch do

      queue 'touch tmp/restart.txt'

    end

  end

end

5.服务器目录初始化

bundle exec mina setup

也可以这样操作,使提示更加详细些

bundle exec mina setup --verbose

6.进行项目部署

bundle exec mina deploy

查看其他命令

mina tasks

原文请见我另外一个博客:http://caok1231.com/blog/2013/03/20/deploy-rails-app-with-mina/

相关推荐