Самый быстрый способ развертывания приложений rails с Passenger - PullRequest
4 голосов
/ 12 апреля 2010

Я работаю на сервере Dreamhost с Rails 2.3.5.

Каждый раз, когда я делаю изменения на сайте, мне нужно зайти на сайт по ssh, удалить все файлы, загрузить zip-файл, содержащий все новые файлы для сайта, распаковать этот файл, перенести базу данных и перейти.

Что-то подсказывает мне, что есть более быстрый способ развертывания rails-приложений. Я использую Mac Time Machine для отслеживания различных версий моих приложений. Я знаю, что git отслеживает файлы, но я не знаю, как с ним работать, чтобы развернуть мои приложения, так как пассажир заботится обо всей магии для меня.

Что может быть более быстрым способом развертывания моих приложений (и чтобы избежать простоев, связанных с моим методом, когда я удаляю все файлы на сервере)?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 12 апреля 2010

Взгляните на Capistrano .

1 голос
/ 12 апреля 2010

И иди и найди себе помощников Капистрано: http://github.com/westarete/capistrano-helpers

Вот упрощенный аннотированный файл Deploy для моего собственного сайта.

require 'capistrano-helpers/branch'     # prompts for branch
require 'capistrano-helpers/passenger'  # Support for Apache passenger
require 'capistrano-helpers/version'    # Record the version number after deploying
require 'capistrano-helpers/privates'   # handle sensitive files
require 'capistrano-helpers/shared'

set :application, "site"
set :repository,  "file://."

set :scm, "git"
set :branch, "rails3"
set :deploy_via, :copy

set :copy_exclude, [ ".git", "assets", "test", "Capfile", "vishvish.tmproj", "bin" ]

set :deploy_to, "/blah/blah.com/#{application}"

set :user, "blah"
set :domain, "blah.com"

#Things you want symlinked afterwards, not in version control.
set :privates, %w{
  config/database.yml
}

#Things you want shared across deployments, not uploaded every time.
set :shared, %w{
  uploads
}

role :app, domain
role :web, domain
role :db,  domain, :primary => true

namespace :deploy do
  desc "Restarting mod_rails with restart.txt"
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{current_path}/tmp/restart.txt"
  end

  [:start, :stop].each do |t|
    desc "#{t} task is a no-op with mod_rails"
    task t, :roles => :app do ; end
  end
end
1 голос
/ 12 апреля 2010

Тебе определенно нужны мерзавцы и капистрано.

Мой процесс развертывания:

git commit
git push
cap deploy

Git довольно прост. На github.com есть масса ресурсов и практических рекомендаций. Если вы не используете систему контроля версий, вы ДОЛЖНЫ исправить это ...

...