我是 Ruby 和 RoR 的菜鸟,并且一直在尝试部署我构建的应用程序。
我需要部署我的应用程序的生产机器是一台新机器,因此需要在其上安装 gem。我一直在尝试通过将我需要的 gem 从远程机器复制到 prod 盒来安装 gem。所以我有一两个问题
有没有更好的方法在防火墙后面的机器上安装 rubygems?
一旦我在 prod box 上安装了所有 gem,部署应用程序本身的最佳方式是什么?我是否需要设置某种 rsync/scp 等?还是有更好的行业标准方法来做到这一点?
我是 Ruby 和 RoR 的菜鸟,并且一直在尝试部署我构建的应用程序。
我需要部署我的应用程序的生产机器是一台新机器,因此需要在其上安装 gem。我一直在尝试通过将我需要的 gem 从远程机器复制到 prod 盒来安装 gem。所以我有一两个问题
有没有更好的方法在防火墙后面的机器上安装 rubygems?
一旦我在 prod box 上安装了所有 gem,部署应用程序本身的最佳方式是什么?我是否需要设置某种 rsync/scp 等?还是有更好的行业标准方法来做到这一点?
您可以使用Capistrano解决这两个问题。Capistrano 是一个 ruby 脚本,允许您从工作副本或直接从远程存储库部署项目。它是通过 SSH 连接完成的。
它还使用 Bundler 处理 gems。如果您的某些 gem 是私有的(例如在 Github 帐户中),您可以设置 Capistrano 以使用您的本地 SSH 密钥 ( ssh_options[:forward_agent] = true
)。另一种方法是使用 Capistrano 配方Strategy Copy Bundled在本地捆绑您的 gem,然后再将它们上传到远程服务器上。
总而言之,使用 Capistrano,可以设置一个部署,其中您的本地机器是一切(您的应用程序、您的 gems,...)通过的中介。
|------------| |----------------| |--------------|
| Internet |-------| Your Machine |---[SSH]---| Production |
| (Github, | |----------------| |--------------|
| RubyGems,|
| etc.) |
|------------|
更新
我在下面添加了一个config/deploy.rb
做你想做的事的例子。但是,向您解释 capistrano 的所有细节远远超出了您的问题。我建议您阅读有关它的内容,我已经提供了一些参考资料,您可以开始。
require 'capistrano-strategy-copy-bundled'
set :application, "your application name" # name of the application
set :user, "deployer" # The server's user for deploys
default_run_options[:pty] = true # Must be set for the password prompt
set :ssh_options, { :forward_agent => true } # Using SSH forward agent
set :repository, "git@github.com:account/repo.git"
set :scm, :git # type of scm used
set :deploy_via, :copy_bundled # Capistrano clones your git repo to /tmp on your
# local machine, tars & zips the result, and then
# transfers it to the server via sftp.
set :copy_dir, "/tmp/#{application}" # path where files are temporarily
# put before sending them to the
# servers
set :copy_exclude, ".git*" # excluding the .git directory
set :deploy_to, "/var/www/" # Where to deploy on the server
参考:
无需将 gem 从本地复制到生产机器。您的应用程序中有一个gemfile
为您的项目安装所有必需的 gem。
因此,您需要做的就是bundle install
从 prod 的项目路径中将 gems 安装到生产机器上。
一旦你bundle install
在 prod 上运行,你就可以在那里运行服务器,就像你通常在本地运行一样。
更清楚地说,如果你rails server
在本地做,那么为了安装 gems 然后在生产中运行服务器-
bundle install
rails server -e production
注意:不要忘记进行特定于生产的其他更改,例如更改database.yml
设置。