質問

プラクシュアーズに間隔を置いている名前である建物であるプロジェクトのための一連のカスタムレイクタスクを設定します。これらのタスクは、コンソールからrake tasksを実行して表示できます。

desc 'List all available placewise rake tasks for this application.'
task :tasks do
    result = %x[rake -T | sed -n '/placewise:/{/grep/!p;}']
    result.each_line do |task|
            puts task
    end
end
.

これらのタスクはすべてlib/tasks/placewiseに格納され、そのように構築されています。

namespace :placewise do
    namespace :db do
    desc "Drop and create the current database, the argument [env] = environment."
    task :recreate, [:env] do |t,args|
            env = environments(args.env)
            msg("Dropping the #{env} database")
            shell("RAILS_ENV=#{env} rake db:drop", step: "1/3")
            msg("Creating the #{env} database")
            shell("RAILS_ENV=#{env} rake db:create", step: "2/3")
            msg("Running the #{env} database migrations")
            shell("RAILS_ENV=#{env} rake db:migrate", step: "3/3")
    end
  end
end
.

新しいタスクは、例えば、基本設定から次のように始めることがあります。

namespace :placewise do
    namespace :example do
    desc "example"
    task :example do

    end
  end
end
.

毎回namespace :placewise doが複製されます。私たちのカスタムレイクタスクをすべて同じグループに保持したいのですが、それぞれの.rakeファイルにその名前空間を追加する必要がない方法がある場合は興味がありますか?

歓声。

役に立ちましたか?

解決

残念ながら私はこの戦略に対して忠告され、発見の過程で私は私のヘルパーメソッドが正しく設定されていなかったことを見つけました。だからここに行きます。

lib/modulesに新しいModulesフォルダを作成し、そのディレクトリ内の新しいhelper_functions.rbファイルを作成しました。これが私のヘルパーです:

モジュールヘルパー機能

    # ------------------------------------------------------------------------------------
    # Permitted environments
    # ------------------------------------------------------------------------------------
    def environments(arg)
        arg = arg || "development"
        environments = ["development", "test", "production"]
        if environments.include?(arg)
            puts
            msg("Environment parameter is valid")
            return arg
        else
            error("Invalid environment parameter")
            exit
        end
    end
    # ------------------------------------------------------------------------------------
    # Console message handler
    # ------------------------------------------------------------------------------------
    def msg(txt, periods: "yes", new_line: "yes")
        txt = txt + "..." if periods == "yes"
        puts "===> " + txt
        puts if new_line == "yes"
    end
    def error(reason)
        puts "**** ERROR! ABORTING: " + reason + "!"
    end
    # ------------------------------------------------------------------------------------
    # Execute Shell Commands
    # ------------------------------------------------------------------------------------
    def shell(cmd, step: nil)
        msg("Starting step #{step}", new_line: "no") if step.present?
        if ENV['TRY']
            puts "-->> " + cmd
        else
            sh %{#{cmd}}
        end
        msg("#{step} completed!", periods: "no")
    end
end
.

それからRakefile add:

# Shared Ruby functions used in rake tasks
require File.expand_path('../lib/modules/helper_functions', __FILE__)
include HelperFunctions

Rails.application.load_tasks

# Do not add other tasks to this file, make files in the primary lib/tasks dir ending in .rake
# All placewise tasks should be under the lib/tasks/placewise folder and end in .rake
desc 'List all available placewise rake tasks for this application.'
task :tasks do
    result = %x[rake -T | sed -n '/placewise:/{/grep/!p;}']
    result.each_line do |task|
            puts task
    end
end
.

と最後に私の.rakeタスクは次のようになります。

namespace :placewise do
# ------------------------------------------------------------------------------------
    namespace :db do
        # ------------------------------------------------------------------------------------
    desc "Drop and create the current database, the argument [env] = environment."
    task :recreate, [:env] do |t,args|
            env = HelperFunctions::environments(args.env)
            HelperFunctions::msg("Dropping the #{env} database")
            HelperFunctions::shell("RAILS_ENV=#{env} rake db:drop", step: "1/3")
            HelperFunctions::msg("Creating the #{env} database")
            HelperFunctions::shell("RAILS_ENV=#{env} rake db:create", step: "2/3")
            HelperFunctions::msg("Running the #{env} database migrations")
            HelperFunctions::shell("RAILS_ENV=#{env} rake db:migrate", step: "3/3")
    end
        # ------------------------------------------------------------------------------------
  end
# ------------------------------------------------------------------------------------
end
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top