2013-03-11 47 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