Rails.root пуст в Custom Rake Task в Rails 3.0

Возможно, я пропустил это в документации по обновлению, но если я выведу «Rails.root» в консоли rails, я увижу корневой путь моего приложения. Но если я укажу «Rails.root» в пользовательской задаче Rake, она будет пустой. Что мне не хватает? Заранее спасибо.

Образец:

namespace :admin do
    desc "Import some data"
    task :import => :environment do
        csv = Rails.root + "/test/data.csv"
        raise "#{csv} does not exit. Stopping task." if !File.exists?(csv)

        CSV.foreach(csv, :headers => :first_row) do |row|
            puts(row['id'])
        end
    end
end

Я получаю исключение каждый раз, потому что «Rails.root» — это «».


person JP Richardson    schedule 10.09.2010    source источник


Ответы (2)


Попробуйте методом соединения

csv = Rails.root.join('test/data.csv')

csv станет Pathname вашего файла.

person shingara    schedule 10.09.2010
comment
Нет... это не сработало. Правилен ли синтаксис моей задачи? то есть задача :import =› :environment - person JP Richardson; 11.09.2010
comment
да, синтаксис кажется правильным и может работать. Попробуйте без первого / я обновляю свой ответ с ним. Потому что генерируется плохое имя пути. - person shingara; 11.09.2010

Для справки:

Rails.root + "test/data.csv" 

также будет работать, это ведущая косая черта, которая все портит.

"#{Rails.root}/test/data.csv"

также работает (на самом деле вам нужна «ведущая» косая черта).

person Andrew Wright    schedule 03.02.2012