Подтвердить что ты не робот

Установите этап по умолчанию с помощью Capistrano 3

Есть ли способ установить этап по умолчанию в Capistrano 3?

Я попытался разместить set :stage, :production внутри deploy.rb, но это не сработало, оно дает ошибку:

Stage not set, please call something such as `cap production deploy`,
where production is a stage you have defined

У меня только один этап прямо сейчас, поэтому я хочу просто запустить cap deploy и выполнить его по умолчанию.

4b9b3361

Ответ 1

Capistrano v3 - это нечто вроде обертки вокруг Rake, поэтому вам нужно понять, что на самом деле происходит то, что задача production запускается сначала, а затем задача deploy.

Если вы немного отлаживаете его, вы обнаружите, что deploy.rb не загружается, когда вы не вводите этап. Это связано с тем, что этапная задача заключается в загрузке deploy.rb: в lib/setup.rb задание задается для каждого этапа. При запуске задача этапа устанавливает :stage, загружает значения по умолчанию capistrano и затем загружает ваш файл deploy.rb.

Таким образом, простой трюк заключается в том, чтобы сказать Capistrano вызывать сценную задачу каждый раз, когда вы запускаете cap, добавляя это в конец своего Capfile ( не ваш deploy.rb)

Rake::Task[:production].invoke

или, используя метод invoke от Capistrano DSL:

invoke :production

Это может иметь некоторые непреднамеренные последствия, если вы действительно используете несколько этапов, но если вы используете только этап production, он должен работать нормально.

Другим простым решением может быть простой псевдоним оболочки, такой как alias cap='cap production', но он может не сработать, если у вас несколько проектов с разными именами сцен.

Ответ 2

После того как я cd в корневой каталог RAILS, выполните команду:

cap development deploy

похоже, работает. Раньше я был в папке app/models и выдавал команду с этой ошибкой:

Stage not set, please call something such as cap production deploy, where production is a stage you have defined.

Ответ 3

Старое решение работает для меня в Capistrano 3:

cap --version
#=> Capistrano Version: 3.3.5 (Rake Version: 10.4.2)

В самом верху Capfile после этих строк

# Load DSL and Setup Up Stages
require 'capistrano/setup'

добавить:

set :stage, :production

а затем выполните задание как обычно без указанного этапа:

cap foo:bar

Ответ 4

Вы можете добавить следующую строку в ваш deploy.rb, который не позволит Capistrano ожидать этап:

set :stages, ["production"]