我正在制作一个rails应用程序,它依赖于基于我从抓取网站获得的CSV文件的数据库。我想将CVS文件导入数据库。我生成了一个模型,如下所示。
class Challenge < ActiveRecord::Base
end
我的迁移文件:
class CreateChallenges < ActiveRecord::Migration
def change
create_table :challenges do |t|
t.string :location
t.string :name_source
t.string :location_name
t.string :name_text
t.string :restaurant_text
t.string :restaurant
t.string :location_title
t.string :description
t.string :name
t.string :state
t.timestamps null: false
end
end
end
我的Rakefile:
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require 'csv'
require 'Models::Challenge.rb'
Rails.application.load_tasks
csv_text = File.read('db/Vancouver.csv', :encoding => 'iso-8859-1')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
Challenge.create!(row)
end
当我运行rake import
或bundle exec rake import:challenge
时,我收到以下错误:
rake aborted!
LoadError: cannot load such file -- Models::Challenge.rb
/Users/kamilkhan/Documents/CPSC 310/Project/Rubies-In-The-Rough/Rakefile:6:in `require'
/Users/kamilkhan/Documents/CPSC 310/Project/Rubies-In-The-Rough/Rakefile:6:in `<top (required)>'
(See full trace by running task with --trace)
- 跟踪给了我:
rake aborted!
LoadError: cannot load such file -- Models::Challenge.rb
/Users/kamilkhan/Documents/CPSC 310/Project/Rubies-In-The-Rough/Rakefile:6:in `require'
/Users/kamilkhan/Documents/CPSC 310/Project/Rubies-In-The-Rough/Rakefile:6:in `<top (required)>'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/rake_module.rb:28:in `load'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/rake_module.rb:28:in `load_rakefile'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/application.rb:689:in `raw_load_rakefile'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/application.rb:94:in `block in load_rakefile'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/application.rb:93:in `load_rakefile'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/application.rb:77:in `block in run'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/Users/kamilkhan/.rvm/rubies/ruby-2.2.0/bin/rake:33:in `<main>'
有关如何解决此问题的任何想法?我是Ruby和Rails的新手,所以请ELI5
提前致谢!
答案 0 :(得分:3)
Rake可以自动为您加载所有型号等。此外,您应该将该任务放入其自己的文件中,而不是rails使用的Rakefile。
尝试这样的事情:
lib / tasks / import.rake (任何以.rake结尾的文件名都可以使用)
desc "Imports stuff from CSV"
task :import => :environment do
require 'csv'
csv_text = File.read('db/Vancouver.csv', :encoding => 'iso-8859-1')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
Challenge.create!(row)
end
end
然后,您应该能够运行rake import
来运行该任务。 environment
告诉rake加载你的Rails堆栈,以便你可以使用你的模型等。