rake 文件中未定义的方法

Undefined method in rake file

我收到错误

NoMethodError: undefined method `symfony_console' 

我在 rake 文件中定义的任务 (lib/capistrano/tasks/my_tasks.rake)

task :migrate do
  on roles(:all) do
    symfony_console('doctrine:migrations:migrate', '--no-interaction')
  end
end

symfony_console 方法由 capistrano/symfony 扩展提供。顶文件:

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/composer'
require 'capistrano/symfony'

我做错了什么?

更新: 问题可能与角色有关?

如果您提供了整个 Capfile,您将缺少 capistrano/symfony

改成这样:

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/composer'
require 'capistrano/symfony'

确保你已经正确安装了 gem capistrano 并且 capistrano-symfony,否则遵循this step.

我从未使用过此功能 (symfony_console(...)),但它应该可以使用。

编辑

您应该在 deploy.rb 中写下您的任务。

EDIT2

如果您还没有,请尝试为您的任务设置命名空间,如下所示:

namespace :deploy do
  before 'updated', 'schemadb'
  task :migrate do
    on roles(:all) do
      symfony_console('doctrine:migrations:migrate', '--no-interaction')
    end
  end
end

如果不行,尝试将任务正文改为:

on roles(:all) do
  invoke 'symfony:console', 'doctrine:migrations:migrate', '--no-interaction'
end

这是我用的

问题是由于旧版本 capistrano/symfony

与 capistrano-symfony 版本 1.0.0.rc3 有同样的问题。看起来 https://github.com/capistrano/symfony/blob/master/lib/capistrano/dsl/symfony.rb 不是 imported/used。

我绝对不是 Ruby 专家,但我很好奇如何调试它...