У меня уже есть deploy.rb, который может развернуть мое приложение на моем производственном сервере.
Мое приложение содержит настраиваемую задачу rake (файл .rake в каталоге lib / tasks).
Я хотел бы создать задачу ограничения, которая будет удаленно запускать эту задачу рейка.
ruby
rake
capistrano
Ричард Пуарье
источник
источник
#{rake}
переменной capistrano ? Кажется, это не всегда лучший вариант.Ответы:
Немного более явным, в вашем
\config\deploy.rb
, добавьте вне любой задачи или пространства имен:Затем из
/rails_root/
, вы можете запустить:источник
... пару лет спустя ...
Взгляните на плагин rails capistrano, вы можете увидеть на https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake#L5-L14 он может выглядеть примерно так:
источник
run
будет работать на capistrano до версии 2. начиная с версии 3 это путь.Capistrano 3 Generic Version (запускать любую задачу грабли)
Создание общей версии ответа Мирека Русина:
Пример использования:
cap staging "invoke[db:migrate]"
Обратите внимание, что
deploy:set_rails_env
требуется от драгоценного камня capistrano-railsисточник
rake args[:command]
на,execute :rake, "#{args.command}[#{args.extras.join(",")}]"
вы можете выполнить задачу с несколькими аргументами, например:cap production invoke["task","arg1","arg2"]
cap staging invoke['task[arg1\,arg2]']
. Я предпочитаю этот подход тому, который вы упомянули, потому что он отражает фактический вызов rake. При таком подходе вы можете также приковать несколько задач, которые часто полезны:cap staging invoke['task1 task2[arg1] task3[arg2\,arg3]']
. Работает для rake 10.2.0 и новееНашел с помощью Google - http://ananelson.com/said/on/2007/12/30/remote-rake-tasks-with-capistrano/
Это
RAILS_ENV=production
была ошибка - я сначала не подумал об этом и не мог понять, почему задача ничего не делает.источник
"cd #{deploy_to}/current && #{rake} <task_name> RAILS_ENV=production"
Используйте призывы граблей в стиле Капистрано
Есть общий способ, который "просто работает" с
require 'bundler/capistrano'
другими расширениями, изменяющими рейк. Это также будет работать с предпроизводственной средой, если вы используете многоступенчатую версию. Суть? По возможности используйте переменные конфигурации.источник
top.run
вместо простоrun
top
методу . В случае, когда мы определилиrun
в том же пространстве имен,top.run
требуется, иначе он все равно должен найти верхний уровень,run
даже если задача находится в пространстве имен. Я что-то упустил? Что случилось в вашем случае?Используйте
capistrano-rake
драгоценный каменьПросто установите драгоценный камень, не вмешиваясь в пользовательские рецепты капистрано, и выполните желаемые задачи по рейку на удаленных серверах, например:
Полное раскрытие: я написал это
источник
Я лично использую в производстве такой вспомогательный метод:
Это позволяет запускать задачу rake аналогично использованию метода run (command).
ПРИМЕЧАНИЕ: это похоже на то, что предложил Дюк , но я:
источник
Есть интересная жемчужная накидка, которая делает ваши рейк-задачи доступными как задачи Capistrano, так что вы можете запускать их удаленно.
cape
хорошо документирован, но вот краткий обзор того, как настроить i.После установки драгоценного камня просто добавьте его в свой
config/deploy.rb
файл.Теперь вы можете запускать все свои
rake
задачи локально или удаленноcap
.В качестве дополнительного бонуса
cape
вы можете указать, как вы хотите запускать задачу rake локально и удаленно (не болееbundle exec rake
), просто добавьте это в свойconfig/deploy.rb
файл:источник
источник
RAILS_ENV=production
наRAILS_ENV=#{rails_env}
позволяет ему работать и на моем промежуточном сервере.Вот что я вложил в свой deploy.rb, чтобы упростить выполнение задач rake. Это простая оболочка метода run () capistrano.
Затем я просто запускаю любую задачу с граблями, например:
источник
Это сработало для меня:
Тогда просто запустите
cap production "invoke[task_name]"
источник
По большей части это ответ сверху с незначительным улучшением для запуска любой задачи по рейку из capistrano.
Запустите любую задачу по граблям от capistrano
источник
Это тоже работает:
Более подробная информация: Capistrano Run
источник
Если вы хотите передать несколько аргументов, попробуйте следующее (на основе ответа мариносберна):
Затем вы можете запустить такую задачу:
cap production invoke["task","arg1","arg2"]
источник
Итак, я работал над этим. швы работают хорошо. Однако вам нужен форматировщик, чтобы действительно воспользоваться преимуществами кода.
Если вы не хотите использовать форматировщик, просто установите уровень журнала в режим отладки. Эти семас к ч
Шапка
Это средство форматирования, которое я построил для работы с приведенным выше кодом. Он основан на :textimple, встроенном в sshkit, но это неплохой способ вызывать пользовательские задачи. О, это много не работает с последней версией sshkit gem. Я знаю, что он работает с 1.7.1. Я говорю это потому, что главная ветвь изменила доступные методы SSHKit :: Command.
источник
Предыдущие ответы мне не помогли, и я нашел это: Из http://kenglish.co/run-rake-tasks-on-the-server-with-capistrano-3-and-rbenv/
для запуска вашей задачи используйте
Может кому будет полезно
источник