Faker "Не знаете, как создать задачу?"

Я проверил вопросы, которые уже задавали по этой теме «Их много», но не нахожу решения.

У меня довольно большая задача, и имя файла - 'sample_employee_data.rake' ... итак:

      namespace :db do 
        desc "Fill database with sample Employee data"
        task populate: :environment do

          @gender = ["Male", "Female"]
          @role = ["Staff", "Support", "Team_Leader", "Manager", "Director"]
          @marital_status = ["Single", "Married"]
          @primary_position = ["Household", "Job Developer", "Job Coach", 
                     "Job Support", "Personal Care"]
          @trained_position = ["Household", "Job Developer", "Job Coach", 
                     "Job Support", "Personal Care"]
          @emer_contact_relationship = ["Friend", "Brother", "Sister", "Aunt", 
                              "Uncle", "Cousin", "Nephew", "Father",
                              "Mother", "Spouse"]

          def randomDate(params={})
            years_back = params[:year_range] || 5
            latest_year = params[:year_latest]  || 0
            year = (rand * (years_back)).ceil + 
            (Time.now.year - latest_year - years_back)
             month = (rand * 12).ceil
             day = (rand * 31).ceil
             series = [date = Time.local(year, month, day)]
             if params[:series]
               params[:series].each do |some_time_after|
                 series << series.last + (rand * some_time_after).ceil
               end
               return series
              end
              date
            end

            Employee.create!(first_name:      "Shelly",
                 last_name:                   "Houghton",
                 mi:                          "M",
                 full_name:                   "Shelly M Houghton",
                 marital_status:              "Single",                  
                 gender:                      "Female",
                 hire_date:                   "2000-04-16",
                 primary_position:            "Manager",
                 trained_position:            "Job Developer",
                 email:                       "[email protected]",
                 active:                      true,
                 address1:                    "76th Ave",
                 city:                        "Frave",
                 zip_code:                    "54806",
                 state:                       "WI",
                 emp_home_ph:                 "1-111-111-1111",
                 emp_mobile_ph:               "1-222-222-2222",
                 emer_contact_first_name:     "Kenneth",
                 emer_contact_last_name:      "Koening",
                 emer_contact_relationship:   "Friend",
                 emer_contact_ph:             "1-333-333-3333",
                 role:                        "Manager",
                 birth_date:                  "1982-08-21",
                 admin:                       true,
                 password:                    "90nothguoh",
                 password_confirmation:       "90nothguoh")

         99.times do |n|
           first_name = Faker::Name.first_name
           last_name = Faker::Name.last_name
           mi = ("A".."Z").to_a[rand(26)]
           full_name = Faker::Name.full_name
           marital_status = @marital_status[rand(2)].to_s
           gender = @gender[rand(2)].to_s
           hire_date = randomDate(:year_range => 60, :year_latest => 12)
           birth_date = randomDate(:year_range => 60, :year_latest => 22)
           primary_position = @primary_position[rand(5)].to_s
           trained_position = @trained_position[rand(5)].to_s
           email = "emp-#{n+1}@example.org"
           active = [true, false][rand(2)]
           admin = (1 == rand(2) ? true : false)
           role = @role[rand(5)].to_s
           address1 = "Seaview-#{n+5}Way"
           city = Faker::Lorem.words(1).to_s.capitalize
           state = Faker::Address.us_state()
           zip_code = Faker::Address.zip_code
           emp_home_ph = Faker::PhoneNumber.phone_number
           emp_mobile_ph = Faker::PhoneNumber.phone_number
           emer_contact_first_name = Faker::Name.first_name
           emer_contact_last_name = Faker::Name.last_name
           emer_contact_relationship = @emer_contact_relationship[rand(10)].to_s
           emer_contact_ph = Faker::PhoneNumber.phone_number
           password = "uniqueone"
           Employee.create!(first_name: first_name, mi: mi, last_name: last_name,
                   full_name: full_name, marital_status: marital_status,
                   gender: gender, birth_date: birth_date, hire_date: hire_date,
                   primary_position: primary_position, trained_position: 
                   trained_position, email: email, role: role, address1:
                   address1, city: city, state: state, zip_code: zip_code, 
                   emp_home_ph: emp_home_ph, emp_mobile_ph: emp_mobile_ph,
                   emer_contact_first_name: emer_contact_first_name, 
                   emer_contact_last_name: emer_contact_last_name, 
                   emer_contact_relationship: emer_contact_relationship,
                   emer_contact_ph: emer_contact_ph, password: password, 
                   password_confirmation: password)
         end
       end
     end

Я побежал:

     rake sample_employee_data.rake

и у меня есть этот флаг:

  rake aborted!
  Don't know how to build task 'sample_employee_data.rake'
  home/me/.rvm/gems/ruby-1.9.3-p385@rails3212/bin/ruby_noexec_wrapper:14:in 'eval'
  home/me/.rvm/gems/ruby-1.9.3-p385@rails3212/bin/ruby_noexec_wrapper:14:in '<main>'

Кто-нибудь может определить проблему ... Мои извинения за такой длинный файл.

Спасибо.


person thomasvermaak    schedule 15.02.2013    source источник
comment
К вашему сведению, стандартный способ получения исходных данных в базе данных в Rails - это использование задачи db:seed; взгляните на этот вопрос и ответьте .   -  person nickgrim    schedule 18.02.2013
comment
Спасибо @nickgrim ... Я проверю железнодорожную передачу 'seed-data'   -  person thomasvermaak    schedule 18.02.2013


Ответы (1)


Здесь происходит пара вещей.

Когда вы запускаете $ rake sample_employee_data.rake, вы просите rake разгребать ваш файл, но rake отвечает на задачи:

$ rake some_namespace:some_task_in_that_namespace

Вы также используете пользовательский .rake file, а не обычный Rakefile - это нормально, но это означает, что вам нужно явно указать rake, что вы не используете его Rakefile по умолчанию.

$ rake --rakefile your_custom_rake_file.rake some_task

Итак, в вашем случае вам нужно ввести команду rake следующим образом:

$ rake --rakefile sample_employee_data.rake db:populate

person Rick Winfrey    schedule 17.02.2013
comment
Спасибо @Rick Winfrey за ваш ответ ... человек, который действительно исчерпывающий, и я очень ценю время и подумал, что вы вложили в свой ответ. Я выполнил команду, как вы предложили, но грабли по-прежнему прерываются! флаг. Rakefile не найден (ищу: sample_employee_data.rake) ... я должен указать ему путь к rakefile? ... еще раз спасибо. - person thomasvermaak; 17.02.2013
comment
Вы запускаете команду rake в том же каталоге, что и файл rake? Если вы находитесь в том же каталоге, вы можете просто ввести: $ rake --rakefile sample_employee_data.rake db:populate Но если нет, вам нужно указать путь к файлу: $ rake --rakefile path/to/sample_employee_data.rake db:populate Сообщите мне, как это получается. - person Rick Winfrey; 17.02.2013
comment
Хорошо ... Я изменил свой каталог на lib / tasks / и запустил файл, как вы предложили, и теперь флаг: Не знаю, как создать среду задачи ... в файле, в котором есть задача, заполнить:: среда делать ... у него проблемы с окружающей средой. - person thomasvermaak; 18.02.2013
comment
Я удалил «среду», и теперь она работает, но с этой проблемой; приношу свои извинения за неудобство, проблема в синтаксической ошибке ... 99. раз do | n | ... неожиданное ключевое слово do_block, ожидающее конца. - person thomasvermaak; 18.02.2013
comment
ну, это не совсем работает, но это лучший ответ, поэтому я оставлю все как есть ... спасибо. - person thomasvermaak; 19.02.2013