config/schedule.rbのrequireメモ

wheneverでcronの設定をするためのファイルconfig/schedule.rbに以下の記載があります

require File.expand_path(File.dirname(__FILE__) + "/environment")

分解して考えてみます。

File.expand_path(path名)

これはpath名を絶対パスに展開した文字列を返すメソッドです。第二引数を指定しない場合は、カレントディレクトリを相対パスの基準にして、絶対パスに変換します。今回のはこのパターンです。

current_path = "~/environment/workdir"
path名 = "ruby"
"~/environment/workdir/ruby"

第二引数を指定した場合は、指定したパスを相対パスの基準にして、絶対パスに変換します。

File.expand_path(path名, "~/environment/workdir/program")
current_path = "~/environment/workdir"
path名 = "ruby"
"~/environment/workdir/program/ruby"

次はpath名の中身をみてみます

File.dirname(file名)

これはfile名がもつディレクトリを文字列で返すメソッドです。ディレクトリを持たない場合はカレントディレクトリを返します。

File.dirname("home/dir/file.ext")    # => "home/dir"
File.dirname("file.ext")        # => "."

次はfile名をみてみます。

(__FILE__)

これは現在の実行中のソースファイル名を返す変数です。コマンドを実行したディレクトリからの相対パスでファイル名を返します。

#environment/workdir/hbkk_ruby.rb
puts __FILE__

#~/environmentで
$ ruby workdir/hbkk.rb
workdir/hbkk.rb

#~/environment/workdirで
$ ruby hbkk.rb
hbkk.rb

なので冒頭の

require File.expand_path(File.dirname(__FILE__) + "/environment")

はschedule.rbのディレクトリであるconfigまたはカレントパス(.)のどちらかプラス"/environment"をrequireしていることになります。

require "./environment" or "config/environment"

何か解釈間違ってるところあったら教えてください。


この記事が気に入ったらサポートをしてみませんか?