Хобрук: Ваш путь к мастерству в программировании

Развертывание capistrano без доступа к целевому рабочему ящику к git-окну

Итак, у меня есть ситуация, когда мы перенесли нашу среду stash (git repo) в другую коробку. Назовем это stash_box.

Раньше это был мой процесс развертывания в продукте.

У меня есть безопасный ящик Linux, который используется для развертывания. Давайте назовем это deploy_box.

Давайте назовем целевой prod-сервер prod_box.

Теперь ранее ящики для производства имели доступ по ssh к ящику для хранения (prod_box -> stash_box)

Поэтому, когда я вытаскиваю код из deploy_box и запускаю

cap prod_box deploy

Раньше он успешно развертывался.

Теперь есть правило брандмауэра, которое не разрешает связываться prod_box с stash_box, в котором есть репозиторий git.

Насколько я понимаю, capistrano нуждается в соединении между целевым сервером и сервером тайника.

Теперь deploy_box может добраться до stash_box, а также prod_box в обоих направлениях.

Есть ли способ добиться производственного развертывания, изменив существующий скрипт capistrano?

Это мой существующий файл deploy.rb:

require "capistrano/ext/multistage"
require "bundler/capistrano"


SECURE_FILES = ['database.yml', 'initializers/secret_token.rb']

set :application,   "myapp"
set :use_sudo,      false

set :scm,           :git
set :repository, "ssh://git@stash_box:7999/web/myapp.git"
set :user, "webuser"
set :deploy_via, :remote_cache

after "deploy:update_code", "custom:create_symlinks", "custom:assets_precompile", "custom:miscellaneous"
after "deploy", "deploy:migrate"
after "deploy", "deploy:cleanup"

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

namespace :custom do

  desc "Assets Pre-Compilation"
  task :assets_precompile, :roles => :app do
    run "cd #{current_release} && RAILS_ENV=#{rails_env} bundle exec rake assets:precompile"
  end
end

Это мой файл prod_box.rb:

server "prod_box", :app, :web, :db, :primary => true

set :deploy_to, "/opt/web/var/my_app"
set :rails_env, "customertest"
set :branch, "staging"

Ответы:


1

Просто используйте другую стратегию развертывания:

set :deploy_via, :copy

Теперь исходный код будет проверен локально и загружен на удаленный сервер. Подробнее об этом можно прочитать здесь

Изменить

Для capistrano v3 вам нужно будет использовать этот gem и указать:

set :scm, :gitcopy
06.10.2015
  • Спасибо, я попробую это. Есть ли причина, по которой capistrano 3 удалил метод копирования deploy_via? Есть ли недостатки, связанные с вышеуказанным подходом? 08.10.2015
  • Вы можете прочитать обсуждение здесь. тл; ДР; Авторы не хотели поддерживать эту функцию из-за различий между платформами. 08.10.2015
  • Спасибо. но похоже, что это важная функция, которая должна быть в capistrano, поскольку многие производственные системы не имеют прямого доступа к исходному коду. 08.10.2015
  • Новые материалы

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..

    Случай использования npm3 вместо npm2 для разработки библиотеки
    Некоторое время назад я создал библиотеку на NodeJS, чтобы упростить рендеринг на стороне сервера и клиента. Он использует React и React Router для отображения соответствующего HTML на веб-сайте...