2015-02-15 2 views
0

Я пытался выполнить простую задачу добавления состояний в страну в моем новом проекте.Тот же код rake task does no cosole успешно

Я добавил задачу рейка, чтобы остальная часть моей команды могла просто запустить ее, и они хороши, чтобы пойти и то же самое для производства.

task :add_canada_states => :environment do 
    puts "Finding Canada" 
    canada = Country.find_by_name("Canada") 
    if canada.present? 
     puts "Found canada" 
     canada_states_hash = [ 
     {name: "Ontario", code: "ON"}, 
     {name: "Quebec", code: "QC"}, 
     {name: "Nunavut", code: "NU"}, 
     {name: "Northwest Territories", code: "NWT"}, 
     {name: "Nova Scotia", code: "NS"}, 
     {name: "New Brunswick", code: "NB"}, 
     {name: "Manitoba", code: "MB"}, 
     {name: "British Columbia", code: "BC"}, 
     {name: "Prince Edward Island", code: "PE"}, 
     {name: "Saskatchewan", code: "SK"}, 
     {name: "Yukon", code: "YT"}, 
     {name: "Alberta", code: "AB"}, 
     {name: "Newfoundland and Labrador", code: "NL"} 
     ] 

     canada.states.create(canada_states_hash) 
    else 
     puts "Countries are not there" 
    end 

    end 

После запуска задачи локально выход был

Finding Canada 
Found canada 

Который был ожидаемым, я проверил базу данных и нашел запись.

Я сделал то же самое на сервере (Heroku)

Он напечатан тот же выход

Finding Canada 
Found canada 

После проверки базы данных для записей, я обнаружил, что они не были добавлены!

Я скопировал код и вставить его в Heroku Рельсы консоли

И добавили данные.

Это очень странное поведение. Что мне не хватает?

+1

скорее всего, среда флаг пропущен, но проверьте [эту тему] (http://stackoverflow.com/a/25282372/3109182) для деталей. – Anthony

+0

имеет ту же среду, что и мое приложение для производства. так как это возможно? –

+0

как вы запустили задачу рейка? очень маловероятно, что это не работает так, как ожидалось, так как heroku заменяет вашу конфигурацию базы данных, поэтому вы не можете писать ни о чем, кроме производственного db. – phoet

ответ

1

Вы использовали canada.states.create, активная запись create имеет мягкий сбой, что означает, что он возвращает false, когда он терпит неудачу, и продолжается.
при выполнении задач рек вы должны использовать create! с треском (!) которая выйдет из строя, бросая ошибку, таким образом, вы знаете, когда и почему произошла ошибка, поэтому заменить эту строку с

canada.states.create!(canada_states_hash) 
+0

Пожалуйста, прочитайте вопрос еще раз. Я взял код и вставил его в консоль, и он работал отлично. –

+0

вы имеете в виду, что он не выдавал ошибку, это то, что делает 'create', оно не останавливается, когда оно терпит неудачу, я сказал, что запустите его снова, но с треском и посмотрите, все ли работает или нет –

 Смежные вопросы

  • Нет связанных вопросов^_^