我是Ruby和R-o-R的小伙子,并且一直在修改我部署的应用程序。
我需要部署应用程序的生产机器是一台新机器,因此需要在其上安装宝石。我一直试图通过将我需要的宝石从远程机器复制到产品盒来安装宝石。所以我有一两个问题
有没有更好的方法在防火墙后面的机器上安装rubygems?
一旦我在prod盒上安装了所有宝石,这是部署应用程序本身的最佳方式吗?我需要设置某种rsync / scp等吗?或者有更好的行业标准方法吗?
答案 0 :(得分: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
做你想做的事情的例子。但是向你解释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
参考文献:
答案 1 :(得分:0)
无需将宝石从本地复制到生产机器。您的应用程序中有一个gemfile
可以为您的项目安装所有必需的gem。
所以你需要的是从prod的项目路径做bundle install
以在生产机器上安装宝石。
在prod上执行bundle install
后,您可以像往常一样在本地运行服务器。
更清楚一点,如果你在本地做rails server
,那么为了安装宝石然后在生产中运行服务器 -
bundle install
rails server -e production
注意:请勿忘记执行其他特定于制作的更改,例如更改database.yml
设置。