如何使用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 进行生产。
提交人:@GeekPeekNet