Та же задача rake code ничего не делает.

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

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

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 rails.

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

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


person khaled_gomaa    schedule 15.02.2015    source источник
comment
скорее всего, пропущен флаг среды, но подробности см. в этой теме.   -  person Anthony    schedule 15.02.2015
comment
у него та же среда, что и у моего производственного приложения. так как это возможно?   -  person khaled_gomaa    schedule 15.02.2015
comment
как вы запускали задачу грабли? очень маловероятно, что это не работает должным образом, поскольку heroku заменяет конфигурацию вашей базы данных, поэтому вы не можете писать ни во что, кроме рабочей базы данных.   -  person phoet    schedule 15.02.2015
comment
исправления рейка для запуска heroku: add_canada_states   -  person khaled_gomaa    schedule 15.02.2015
comment
Используйте создать! просто чтобы убедиться, что вы не сталкиваетесь с ошибками проверки, даже если она работает в консоли, таким образом вы можете изолировать проблему   -  person cousine    schedule 16.02.2015


Ответы (1)


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

canada.states.create!(canada_states_hash)
person Mohammad AbuShady    schedule 16.02.2015
comment
Пожалуйста, прочитайте вопрос еще раз. Я взял код и вставил его в консоль, и он отлично сработал. - person khaled_gomaa; 16.02.2015
comment
вы имеете в виду, что он не выдал ошибку, это то, что делает create, он не останавливается, когда он терпит неудачу, я сказал, запустите его снова, но с треском и посмотрите, работает ли он все еще или нет - person Mohammad AbuShady; 16.02.2015