0

我是 Ruby 和 RoR 的菜鸟,并且一直在尝试部署我构建的应用程序。

我需要部署我的应用程序的生产机器是一台新机器,因此需要在其上安装 gem。我一直在尝试通过将我需要的 gem 从远程机器复制到 prod 盒来安装 gem。所以我有一两个问题

  1. 有没有更好的方法在防火墙后面的机器上安装 ruby​​gems?

  2. 一旦我在 prod box 上安装了所有 gem,部署应用程序本身的最佳方式是什么?我是否需要设置某种 rsync/scp 等?还是有更好的行业标准方法来做到这一点?

4

2 回答 2

3

您可以使用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

参考:

于 2013-03-11T09:49:21.070 回答
0

无需将 gem 从本地复制到生产机器。您的应用程序中有一个gemfile为您的项目安装所有必需的 gem。

因此,您需要做的就是bundle install从 prod 的项目路径中将 gems 安装到生产机器上。

一旦你bundle install在 prod 上运行,你就可以在那里运行服务器,就像你通常在本地运行一样。

更清楚地说,如果你rails server在本地做,那么为了安装 gems 然后在生产中运行服务器-

bundle install
rails server -e production

注意:不要忘记进行特定于生产的其他更改,例如更改database.yml设置。

于 2013-03-11T09:36:12.617 回答