如何使用Mina部署RubyonRails应用程序

来自菜鸟教程
跳转至:导航、​搜索


状态: 已弃用

本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.

请参阅:
本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。


Red 是什么意思

用户需要输入或自定义的行在本教程中将显示为红色

介绍

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

第一步:安装 Mina

安装 Ruby 后,您可以像任何其他 gem 一样安装 mina,通过命令行上的 RubyGems:

gem install mina

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

nano Gemfile
gem 'mina'

注意:如果您的系统上没有 ' 安装 ruby,您可以查看本教程:How to Install Ruby On Rails on Ubuntu 12.04 LTS with rbenv

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

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

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

Queue 是一个非常有用的命令,它可以让我们将要在远程服务器上运行的 bash 命令排队。

调用命令是一个辅助命令,用于从任务中调用其他任务。 例如,假设我们在 deploy.rb 中有这样的内容:

<pre>
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
</pre>

如果您要在终端中运行 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 行。

<pre>
require 'mina/bundler' 
require 'mina/rails' 
require 'mina/git' 
<span class="highlight">require 'mina/rbenv'
# require 'mina/rvm'</span>
</pre>

第 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'
    
    

在此之后,您必须在 ~/.ssh/config 中放置您的主机并启用 forwardagent。

<pre>nano ~/.ssh/config</pre>

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

<pre>
Host myserver.com
ForwardAgent yes
</pre>

第一个命令将用户名设置为 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 版本放在方括号中。 您可以使用 ruby -v 找到您安装的 ruby 版本

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

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

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

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

如果您使用的是 MySQL,则必须取消注释 #invoke :'rails:db_migrate' 。 有关 MySQL 的更多信息,请参阅此 教程 或在此处 查找更具体的内容

第三步:设置和部署

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

mina setup --verbose

详细命令将让您查看此阶段发生的情况,如果此处出现问题,您将准确看到哪个命令失败。

此步骤不应超过 3 秒。

部署应用程序运行

mina deploy --trace

Trace 命令将在发生错误时显示回溯。

可选的第四步:示例

创建一个轨道应用程序:

rails new mynewapp

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

cd mynewapp && nano Gemfile

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

<pre>
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
</pre>

使用所需内容创建 deploy.rb:

nano config/deploy.rb

这就是我的 deploy.rb 寻找这个项目的方式:

<pre>
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
</pre>

注意: I'm 使用 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 进行生产。

提交人:Radu-Bogdan Croitoru

提交人:@GeekPeekNet