2012-06-15 6 views
7

Używam Ruby (1.9.3) i Rails (3.2.2). Mam plik zadań zawierający kilka fałszywych danych do wypełnienia w mojej bazie danych.Nie można przekonwertować zakresu na liczbę całkowitą (Ruby na szynach)

Oto część zadania, które moim zdaniem jest przyczyną problemu

#Create random Tender and populate the db 
    20.times do |n| 
     title = "#{Faker::Company.bs()} tender " 
     company_name = Faker::Company.name 
     opening_date=Time.at(rand * Time.now.to_i) 
     closing_date=Time.at(opening_date + (8*7*24*60*60)) #add 8 weeks to the deadline 
     bid_amount= rand(10000..100000) 
     description=Faker::Lorem.paragraph(sentence_count = 3) 


     Tender.create!(title: title, 
        company_name: company_name, 
        opening_date: opening_date, 
        closing_date: closing_date, 
      bid_amount: bid_amount , 
      bid_amount: bid_amount , 
      description: description) 
    end 

Współpracuje z dev ale tylko powyżej część nie jest wykonywany na bazie produkcyjnej. Używam gem 'sqlite3', '1.3.5' na dev. i

gem 'pg', '0.12.2' na produkcji (Heroku)

Kiedy biegnę

git push heroku 
$ heroku pg:reset SHARED_DATABASE --confirm myapp 
$ heroku run rake db:migrate 
$ heroku run rake db:populate 

db:populate throws an error that says **can't covert Range to Integer.** 

jakieś pomysły co może być problem?

EDIT: Typ danych BID_AMOUNT jest decimal

Odpowiedz

7

Twoja wersja Ruby produkcja nie jest 1.9.3. Prawdopodobnie 1.8.7

$ ruby -v 
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0] 
$ irb 
>> rand(10000..100000) 
TypeError: can't convert Range into Integer 
    from (irb):1:in `rand' 
    from (irb):1 
>> exit 
$ rvm use 1.9.3 
Using /Users/chirantan/.rvm/gems/ruby-1.9.3-p0 
$ irb 
1.9.3p0 :001 > rand(10000..100000) 
=> 37036 

Zainstaluj ruby ​​1.9.3 na produkcji, a metoda rand powinna działać zgodnie z oczekiwaniami.

+0

Ciekawe, że referencja funkcji rand() nie wspomina o tym, że w ogóle akceptuje zakres. Http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-rand – MBHNYC

+1

If czytasz pierwszy wiersz w tym opisie, mówi "Jeśli max jest zasięgiem, zwraca pseudolosową liczbę gdzie range.member (liczba) == prawda." – Chirantan

+0

To nie mówi (i nie akceptuje słusznie) za 1.8.7 http://ruby-doc.org/core-1.8.7/Kernel.html#method-i-rand – Chirantan