2012-06-15 8 views
7

Estoy usando Ruby (1.9.3) y Rails (3.2.2). Tengo un archivo de tareas que contiene un montón de datos falsos para completar en mi base de datos.No se puede convertir el rango en enteros (Ruby on Rails)

Aquí es una parte de la tarea que yo creo que está causando el problema

#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 

Funciona bien con dev, pero sólo la parte de arriba no se ejecuta en la base de datos de producción. Estoy usando gem 'sqlite3', '1.3.5' en dev. y

gem 'pg', '0.12.2' sobre la producción (heroku)

Cuando corro

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

Cualquier idea cuál podría ser el problema?

EDIT: El tipo de datos de BID_AMOUNT es decimal

Respuesta

7

Su versión de producción no es rubí 1.9.3. Probablemente sea 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 

Instale ruby ​​1.9.3 en producción y el método rand debería funcionar como se esperaba.

+0

Interesante, la función de referencia rand() no menciona que acepta un rango en absoluto .. http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-rand – MBHNYC

+1

If lee la primera línea en esa descripción, dice "Si max es Range, devuelve un número pseudoaleatorio donde range.member (number) == true". – Chirantan

+0

Esto no dice (y no acepta correctamente) para 1.8.7 http://ruby-doc.org/core-1.8.7/Kernel.html#method-i-rand – Chirantan