неинициализированная константа Rake :: TestTask - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь run bundle exec rake redmine:plugins NAME=redmine_checklists RAILS_ENV=production и получаю эту ошибку

   NameError: uninitialized constant Rake::TestTask /usr/share/redmine/lib/tasks/redmine.rake:163:in 
   `block (3 levels) in <top (required)>' /usr/share/redmine/lib/tasks/redmine.rake:161:in `block (2 
   levels) in <top (required)>' /usr/share/redmine/lib/tasks/redmine.rake:117:in `block in <top 
   (required)>' /usr/share/redmine/lib/tasks/redmine.rake:18:in `<top (required)>' 
   /var/lib/gems/2.5.0/gems/railties-6.0.3.2/lib/rails/engine.rb:660:in `block in run_tasks_blocks' 
   /var/lib/gems/2.5.0/gems/railties-6.0.3.2/lib/rails/engine.rb:660:in `each' 
   /var/lib/gems/2.5.0/gems/railties-6.0.3.2/lib/rails/engine.rb:660:in `run_tasks_blocks' 
   /var/lib/gems/2.5.0/gems/railties-6.0.3.2/lib/rails/application.rb:518:in `run_tasks_blocks' 
   /var/lib/gems/2.5.0/gems/railties-6.0.3.2/lib/rails/engine.rb:459:in `load_tasks' 
   /var/lib/gems/2.5.0/gems/railties-6.0.3.2/lib/rails/railtie.rb:190:in `public_send' 
   /var/lib/gems/2.5.0/gems/railties-6.0.3.2/lib/rails/railtie.rb:190:in `method_missing' 
   /usr/share/redmine/Rakefile:6:in `<top (required)>' /var/lib/gems/2.5.0/gems/rake- 
   13.0.1/exe/rake:27:in `<top (required)>' /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/lib/bundler/cli/exec.rb:63:in `load' /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load' /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/lib/bundler/cli/exec.rb:28:in `run' /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/lib/bundler/cli.rb:476:in `exec' /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' 
   /var/lib/gems/2.5.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch' 
   /var/lib/gems/2.5.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch' 
   /var/lib/gems/2.5.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start' 
   /var/lib/gems/2.5.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start' 
   /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/exe/bundle:46:in `block in <top (required)>' /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors' /var/lib/gems/2.5.0/gems/bundler- 
   2.1.4/exe/bundle:34:in `<top (required)>' /usr/local/bin/bundle:23:in `load' 
   /usr/local/bin/bundle:23:in 
   `<main>' (See full trace by running task with --trace)

My /usr/share/redmine/lib/tasks/redmine.rake

namespace :redmine do
  namespace :attachments do
    desc 'Removes uploaded files left unattached after one day.'
    task :prune => :environment do
      Attachment.prune
    end

    desc 'Moves attachments stored at the root of the file directory (ie. created before Redmine 2.3) to their subdirectories'
    task :move_to_subdirectories => :environment do
      Attachment.move_from_root_to_target_directory
    end

    desc 'Updates attachment digests to SHA256'
    task :update_digests => :environment do
      Attachment.update_digests_to_sha256
    end
  end

  namespace :tokens do
    desc 'Removes expired tokens.'
    task :prune => :environment do
      Token.destroy_expired
    end
  end

  namespace :watchers do
    desc 'Removes watchers from what they can no longer view.'
    task :prune => :environment do
      Watcher.prune
    end
  end

  desc 'Fetch changesets from the repositories'
  task :fetch_changesets => :environment do
    Repository.fetch_changesets
  end

  desc 'Migrates and copies plugins assets.'
  task :plugins do
    Rake::Task["redmine:plugins:migrate"].invoke
    Rake::Task["redmine:plugins:assets"].invoke
  end

desc <<-DESC
FOR EXPERIMENTAL USE ONLY, Moves Redmine data from production database to the development database.
This task should only be used when you need to move data from one DBMS to a different one (eg. MySQL to PostgreSQL).
WARNING: All data in the development database is deleted.
DESC

  task :migrate_dbms => :environment do
    ActiveRecord::Base.establish_connection :development
    target_tables = ActiveRecord::Base.connection.tables
    ActiveRecord::Base.remove_connection

    ActiveRecord::Base.establish_connection :production
    tables = ActiveRecord::Base.connection.tables.sort - %w(schema_migrations plugin_schema_info)

    if (tables - target_tables).any?
      list = (tables - target_tables).map {|table| "* #{table}"}.join("\n")
      abort "The following table(s) are missing from the target database:\n#{list}"
    end

    tables.each do |table_name|
      Source = Class.new(ActiveRecord::Base)
      Target = Class.new(ActiveRecord::Base)
      Target.establish_connection(:development)

      [Source, Target].each do |klass|
        klass.table_name = table_name
        klass.reset_column_information
        klass.inheritance_column = "foo"
        klass.record_timestamps = false
      end
      Target.primary_key = (Target.column_names.include?("id") ? "id" : nil)

      source_count = Source.count
      puts "Migrating %6d records from #{table_name}..." % source_count

      Target.delete_all
      offset = 0
      while (objects = Source.offset(offset).limit(5000).order("1,2").to_a) && objects.any?
        offset += objects.size
        Target.transaction do
          objects.each do |object|
            new_object = Target.new(object.attributes)
            new_object.id = object.id if Target.primary_key
            new_object.save(:validate => false)
          end
        end
      end
      Target.connection.reset_pk_sequence!(table_name) if Target.primary_key
      target_count = Target.count
      abort "Some records were not migrated" unless source_count == target_count

      Object.send(:remove_const, :Target)
      Object.send(:remove_const, :Source)
    end
  end

  namespace :plugins do
    desc 'Migrates installed plugins.'
    task :migrate => :environment do
      name = ENV['NAME']
      version = nil
      version_string = ENV['VERSION']
      if version_string
        if version_string =~ /^\d+$/
          version = version_string.to_i
          if name.nil?
            abort "The VERSION argument requires a plugin NAME."
          end
        else
          abort "Invalid VERSION #{version_string} given."
        end
      end

      begin
        Redmine::Plugin.migrate(name, version)
      rescue Redmine::PluginNotFound
        abort "Plugin #{name} was not found."
      end

      Rake::Task["db:schema:dump"].invoke
    end

    desc 'Copies plugins assets into the public directory.'
    task :assets => :environment do
      name = ENV['NAME']

      begin
        Redmine::Plugin.mirror_assets(name)
      rescue Redmine::PluginNotFound
        abort "Plugin #{name} was not found."
      end
    end

    desc 'Runs the plugins tests.'
    task :test do
      Rake::Task["redmine:plugins:test:units"].invoke
      Rake::Task["redmine:plugins:test:functionals"].invoke
      Rake::Task["redmine:plugins:test:integration"].invoke
    end

    namespace :test do
      desc 'Runs the plugins unit tests.'
      Rake::TestTask.new :units => "db:test:prepare" do |t|
        t.libs << "test"
        t.verbose = true
        t.pattern = "plugins/#{ENV['NAME'] || '*'}/test/unit/**/*_test.rb"
      end

      desc 'Runs the plugins functional tests.'
      Rake::TestTask.new :functionals => "db:test:prepare" do |t|
        t.libs << "test"
        t.verbose = true
        t.pattern = "plugins/#{ENV['NAME'] || '*'}/test/functional/**/*_test.rb"
      end

      desc 'Runs the plugins integration tests.'
      Rake::TestTask.new :integration => "db:test:prepare" do |t|
        t.libs << "test"
        t.verbose = true
        t.pattern = "plugins/#{ENV['NAME'] || '*'}/test/integration/**/*_test.rb"
      end

      desc 'Runs the plugins ui tests.'
      Rake::TestTask.new :ui => "db:test:prepare" do |t|
        t.libs << "test"
        t.verbose = true
        t.pattern = "plugins/#{ENV['NAME'] || '*'}/test/ui/**/*_test.rb"
      end
    end
  end
end

# Load plugins' rake tasks
Dir[File.join(Rails.root, "plugins/*/lib/tasks/**/*.rake")].sort.each { |ext| load ext }

Rails -v

6.0.3.2

Ruby -v

ruby 2.5.1p57 (29.03.2018, редакция 63029) [x86_64- linux -gnu]

рейк списка драгоценных камней

rake (13.0.1, 12.3.1)

Я пытался удалить Rake :: TestTask из redmine.rake, но это вызвало больше ошибок. Я плохо разбираюсь в ruby -on-rails, и я просто пытаюсь установить плагин redmine.

1 Ответ

0 голосов
/ 07 августа 2020

Вам необходимо require "rake/testtask" добавить это в файл rake, чтобы использовать Rake::TestTask

См. Статью Создание тестовой задачи rake

...