`$RAKE_PRELOAD` to load custom Ruby file before starting application
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 30/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 技術スタック
- ruby
- 領域
- build-system, cli, tooling
調査の方向性
rake コマンドのエントリポイントから開始し、Rake.application.run が Rakefile をロードして handle_options を呼び出す流れを追跡します。提案されている RAKE_PRELOAD の動作を維持しつつ、run の前に preload ファイルをロードする方法を明らかにします。完了条件は、メカニズムについて合意し、実装し、Rake.application のカスタマイズに関するテストでカバーすることです。
索引モデルが issue の本文から書いたものです。
説明
Rake application loads Rakefile AFTER Rake.application.run() started.
Therefore it is not able to customize Rake.application.run() (or other methods defined in Rake.application) in Rakefile.
For example, I want to change Rake::Application#handle_options() to use parser.order(argv) instead of parser.parse(argv) in order not to parse options after task names.
(I'm developing rake extension to allow command-line options for each task, and parser.order() is necessary for this purpose.)
Here is my challenge (Rakefile):
## Rakefile
module Rake
Application.class_eval do
def handle_options(argv)
set_default_options
OptionParser.new do |opts|
opts.banner = "#{Rake.application.name} [-f rakefile] {options} targets..."
opts.separator ""
opts.separator "Options are ..."
opts.on_tail("-h", "--help", "-H", "Display this help message.") do
puts opts
exit
end
standard_rake_options.each { |args| opts.on(*args) }
opts.environment("RAKEOPT")
#end.parse(argv) # !! original !!
end.order(argv) # !! customize !!
end
end
end
But the above Rakefile doesn't work intendedly because Rake application loads Rakefile after Rake.application.run() started.
Therefore, I hope Rake to provide a certain method to load custom ruby file before Rake.application.run() started.
One solution is to load a ruby file specified by the $RAKE_PRELOAD environment variable in rake command.
rake command:
#!/usr/bin/env ruby
require "rake"
preload = ENV['RAKE_PRELOAD'] # !!!
if preload && ! preload.empty? # !!!
require preload # !!!
end # !!!
Rake.application.run
I'd like the dev team to consider this idea.
- 主要言語
- Ruby
- スター
- 2.5k
- フォーク
- 650
- 平均マージ
- 6分
- マージ済み PR(30日)
- 3
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ruby/rake のほかの issue
-
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
-
難易度 3/5 1〜2日 初心者へのやさしさ 48/100
-
難易度 5/5 1週間以上 初心者へのやさしさ 28/100
-
難易度 1/5 1時間未満 初心者へのやさしさ 45/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 38/100
似ている issue
-
SyncEm always forwards a dummy block, so wrapped methods lose their no-block/Enumerator behavior オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
endoflife-date/endoflife.date#11086 ·
-
internal
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
Kong/developer.konghq.com#7322 ·
-
bug P2
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100