4

このカスタム rake タスクを実行して、Rails 3.1 アプリにデータをインポートしようとしています。

desc "Import users." 
    task :import_users => :environment do
        File.open("users.txt", "r").each do |line|
            name, email, age = line.strip.split("\t")
            u = User.new(:name => name, :email => email, :age => age)
            u.save
        end
    end

ファイルを import_users.rake として保存し、アプリの lib/tasks ディレクトリに配置しました。

ただしrake import_users、コマンドラインで実行しようとすると、次のエラーが発生します。

No such file or directory - users.txt

users.txt を .rake ファイルと同じディレクトリ (lib/tasks ディレクトリ) に配置しましたが、それは正しい場所ですか?

4

1 に答える 1

8

ファイル名は、rake ファイルの場所ではなく、rake タスクを実行するディレクトリに相対的です。次のように、レールのインストール ディレクトリを含む絶対パスを指定します。

File.open(File.join(Rails.root, "lib", "tasks", "users.txt"), "r")

データをインポートするための「正しい」場所はありませんが、lib/tasksディレクトリはそうであってはなりません。この目的のために、rails ルートの下に専用のディレクトリを作成し、上記と同じ方法でそれを指すだけです。

于 2012-01-22T21:43:37.053 に答える