如何使用Mina部署Ruby on Rails应用程序

下面是如何使用Mina部署一个Ruby on Rails应用程序。

什么是红色表示

用户需要输入或自定义线将成为红色在本教程!

介绍

Mina是一个部署工具,将允许您构建和运行脚本以通过SSH在服务器上管理部署。 与Capistrano或Vlad不同,mina仅在每次部署时创建一个SSH会话。 Mina是建立在Rake,这意味着没有YAML文件 - 一切都是用Ruby编写的,所以配置文件只是Rake文件。你可以使用mina与通过SSH部署的任何类型的项目。

第一步:安装Mina

安装Ruby后,您可以通过RubyGems在命令行中安装mina像任何其他gem:

gem install mina

或者,您可以在当前rails应用程序中的Gemfile底部添加mina。

nano Gemfile
gem 'mina'

注意:如果你没有在系统上安装红Gem,你可以检查此教程: 如何在Ubuntu上安装Ruby on Rails的与rbenv 12.04 LTS

第二步:创建和编辑deploy.rb

文件deploy.rb是Rake调用的Rakefile。 在这个文件中,我们必须配置服务器并定义我们以后使用mina调用的任务。

在我们开始创建deploy.rb文件之前,让我们来了解我们文件中使用的一些命令。

队列是一个非常有用的命令,它允许我们对bash命令进行排队以在远程服务器上运行。

Invoke命令是一个帮助程序命令,用于从任务调用其他任务。 例如,让我们假设我们在deploy.rb中有这样的东西:

    set  :domain,  'myserver.com'
    set  :user,  'myuser'
    task :down do
      invoke :restart
      invoke :logs
    end

    task :restart do
      queue 'sudo service nginx restart'
    end

    task :logs do
      queue 'tail -f /var/log/nginx/error.log'
    end
    

如果要在终端中运行mina restart,mina将搜索名为restart的任务,并通过SSH在set:domain上指定的远程服务器上运行排队的命令。 所以在这种情况下,mina restart将重新启动myserver.com上的nginx服务器

同样的事情发生在mina日志 - 它在服务器上使用ssh myuser@myserver.com远程调用队列命令(tail -f /var/log/nginx/error.log) 对于mina down,它调用子任务(重新启动和日志),它们排列其命令。

让我们生成deploy.rb文件。 为此,在rails应用程序文件夹中运行mina init:

mina init

让我们打开文件并配置服务器:

nano config/deploy.rb

正如你所看到的,示例文件是很好的注释,所以它很容易理解发生了什么。

在文件的开头,mina将需要bundler,rails和git。 如果使用rbenv或rvm,则必须取消注释第4行或第5行。

    require 'mina/bundler' 
    require 'mina/rails' 
    require 'mina/git' 
    require 'mina/rbenv'
    # require 'mina/rvm'
    

第13-16行是域的设置,部署文件夹,存储库和分支的路径。

    
    # set :rails_env, 'production'
    set :domain, 'myserver.com' 
    set :deploy_to, '/home/myuser/myserver.com' 
    set :repository, 'https://github.com/my-git-user/my-repo.git'
    set :branch, 'master'
    

:rails_env指定用于部署的环境。 :domain是到SSH的主机名或IP地址:deploy_to是要部署到的路径,可以从服务器设置任何文件夹,但确保您有权限。

chown -R user-name /var/www/mydir

:repository是要克隆的Git存储库。 您可以使用HTTP克隆URL或SSH克隆URL,但对于SSH克隆URL,您需要在服务器上拥有您的私钥(我不建议这样做),或者使用一些mina魔法。 所有你需要做的是设置:ssh_options,'-A'并配置用户名和端口。

    
    set :user, 'myuser'
    # set :port, '22'
    set :ssh_options, '-A'
    
    

在这之后,你必须把你的主机和启用forwardagent在〜/ .ssh / config。

nano ~/.ssh/config

把这条线放在那里。 将myserver.com替换为您的主机或IP地址。

    Host myserver.com
    ForwardAgent yes
    

第一个命令将设置SSH的用户名。 如果您使用ssh的自定义端口,请取消注释第二行。 第三行将向ssh命令添加-A标志以启用身份验证代理连接的转发。 基本上,最后一个命令告诉ssh使用相同的私钥,用于登录服务器以克隆存储库。

在环境任务中,您必须取消注释要加载哪个环境。 如果您使用rbenv安装ruby,请取消注释第32行。对于rvm,请取消注释第35行。

    task :environment do
      
      invoke :'rbenv:load'
      # invoke :'rvm:use[ruby-1.9.3-p125@default]'
      
    end
    

注:如果您使用的是RVM,把你的Ruby版本中的方括号。 你可以找到你所安装的版本红Gem使用ruby -v

在任务:setup中,mina将使用deploy_to的路径创建一些文件夹和文件,并更改该文件夹和文件的权限。

一开始,使用默认的文件夹结构非常方便。

在文件的结尾,我们有task:deploy。 当我们使用mina deploy时,所有调用写的都会执行。 默认情况下,mina将克隆存储库,部署shared_pa​​ths,运行bundle安装以获取所有需要的gem到服务器,迁移数据库和预编译资产。

    task :deploy => :environment do 
      deploy do 
        invoke :'git:clone' 
        invoke :'deploy:link_shared_paths' 
        invoke :'bundle:install' 
        
        #invoke :'rails:db_migrate' 
        #invoke :'rails:assets_precompile' 
        
        to :launch do 
          queue "touch #{deploy_to}/tmp/restart.txt" 
        end 
      end 
    end
    

如果你正在使用MySQL,你必须取消注释#invoke :'rails:db_migrate' 有关MySQL的详细信息,请参阅本教程或查找的东西更具体的在这里

第三步:安装和部署

要创建在deploy.rb文件运行中配置的文件夹结构:

mina setup --verbose

Verbose命令将让你看到在这个阶段发生了什么,如果出现错误在这里,你会看到确切的哪个命令失败。

此步骤不应超过3秒钟。

部署应用程序运行

mina deploy --trace

当错误发生时,跟踪命令将显示回溯。

可选第四步:示例

创建rails应用程序:

rails new mynewapp

更改目录并将mina添加到Gemfile:

cd mynewapp && nano Gemfile

在创建deploy.rb之前,将您的rails应用程序添加到Github:

    git init
    git remote add origin git@github.com:username/mynewapp.git
    git add .
    git commit -a -m 'start a new rails application'
    git push origin master
    

创建具有所需内容的deploy.rb:

nano config/deploy.rb

这是我的deploy.rb查找这个项目:

    require 'mina/bundler'
    require 'mina/rails'
    require 'mina/git'
    require 'mina/rbenv'

    set :rails_env, 'production'

    set :domain,     'ip_adress'
    set :deploy_to,  "/home/username/app/#{rails_env}"
    set :app_path,   "#{deploy_to}/#{current_path}"
    set :repository, 'https://github.com/username/mynewapp.git'
    set :branch,     'master'


    task :environment do
      invoke :'rbenv:load'
    end

    task deploy: :environment do

      deploy do
        invoke :'git:clone'
        invoke :'bundle:install'
      end
    end
    

注:我使用https而不是使用ssh。 另外,这是一个非常简单的deploy.rb文件 - 随时添加任务。

运行mina setup创建的所有文件夹,然后运行mina deploy部署Rails应用程序。

你可以看到登录到自己的VPS并检查该文件夹的结果: /home/username/app/production/current

为了测试Rails应用程序,运行bundle exec rails server在此文件夹中,然后打开浏览器并转到ip_adress:3000

* WEBrick是一个用Ruby编写的简单HTTP服务器。 我不建议使用WEBrick生产。

:提交@GeekPeekNet