2013-03-11 16 views
0

我是Ruby和R-o-R的noob,并且一直在调整我部署的应用程序。在生产机器上安装rubygems(关闭网络)

我需要部署我的应用程序的生产机器是新鲜机器,因此需要在其上安装宝石。我一直在试图通过将我需要的宝石从远程机器复制到产品盒来安装宝石。所以我有一个或两个附近的问题

  1. 有没有更好的方式在防火墙后面的机器上安装rubygems?

  2. 一旦我在prod盒上安装了所有gem,这是部署应用程序本身的最佳方式?我需要设置某种类型的rsync/scp等吗?或者有没有更好的行业标准方式来做到这一点?

回答

3

您可以用Capistrano来管理这两个问题。 Capistrano是一个ruby脚本,允许您从工作副本或直接从远程存储库部署项目。它通过SSH连接完成。

它使用Bundler处理宝石。如果某些宝石是私有的(例如在Github帐户中),则可以将Capistrano设置为使用本地SSH密钥(ssh_options[:forward_agent] = true)。另一种方法是使用Capistrano配方Strategy Copy Bundled将您的宝石上载到远程服务器上之前在本地捆绑。

总而言之,通过Capistrano,可以设置一个部署,其中您的本地计算机是所有应用程序(您的应用程序,您的宝石,...)经过的中介。

|------------|  |----------------|   |--------------| 
| Internet |-------| Your Machine |---[SSH]---| Production | 
| (Github, |  |----------------|   |--------------| 
| RubyGems,| 
| etc.) | 
|------------| 

更新 我下面的config/deploy.rb一个例子加入做你想要什么。但是,向你解释卡皮斯特拉诺的所有细节远远超出你的问题。我建议你阅读它,我已经提出了一些参考,你可以开始。

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, "[email protected]: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 

参考文献:

+0

会试试这个。从描述中看,capistrano似乎正在做一个自动部署脚本/工作。如果看起来如此,这应该有助于解决问题。感谢您的图。现在看起来非常简单。 – JNovice 2013-03-11 09:57:14

+0

似乎没有开箱即用。它看起来像缺少一种方法。 – JNovice 2013-03-12 08:47:25

+0

@JNovice我用一个例子更新了我的答案。与Capistrano建立部署有很多细节,我无法覆盖所有这些细节。希望它能帮助你。 – toch 2013-03-12 18:22:34

0

没有必要将宝石从本地复制到生产机器。在您的应用程序中有一个gemfile,它为您的项目安装所有必需的宝石。

所以你只需要在你的项目路径中执行bundle install就可以在生产机器上安装宝石。

一旦您在产品上执行bundle install,您可以在那里运行服务器,就像您通常在本地执行的那样。

更清楚,如果你是在当地做rails server,然后才能安装宝石,然后运行在生产 -

服务器
bundle install 
rails server -e production 

注:不要忘记做其他与生产相关的更改,例如更改您的database.yml设置。

+0

如果事情只是那么乐观。捆绑安装追踪到rubygems.org这需要出站和入站网络访问。在大多数情况下,prod盒在他们周围有一个严格的防火墙访问条件限制这些东西。 – JNovice 2013-03-11 09:55:38

相关问题