rake aborted! NameError: uninitialized constant even add :enviroment to task
rake aborted! NameError: uninitialized constant even add :enviroment to task
我是 RoR 的新手,正在尝试通过在 lib/spreadsheet 下创建一个导入器来创建一个从 google 电子表格导入数据库的任务。但是即使我根据 SOF 中的其他一些问题将 :environment 添加到任务中,rake 也找不到我的进口商。这是我的文件
lib/spreadsheet/importer.rb
class SpreadSheet::Importer
def initialize
@session = GoogleDrive.saved_session("#{Rails.root}/config/google_drive/config.json")
end
def exec(table_name)
#do something
end
end
lib/tasks/spreadsheet.rake
namespace :spreadsheet do
task :get => :environment do
importer = Spreadsheet::Importer.new
importer.exec
end
end
错误:
rake aborted!
NameError: uninitialized constant SpreadSheet
/home/vagrant/workspace/ruby/kuwata-summer/lib/tasks/spreadsheet.rake:1:in <top (required)>
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0
/gems/railties-5.0.0/lib/rails/engine.rb:654:in block in run_tasks_blocks
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/railties-5.0.0/lib/rails/engine.rb:654:in each
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/railties-5.0.0/lib/rails/engine.rb:654:in run_tasks_blocks
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/railties-5.0.0/lib/rails/application.rb:443:in run_tasks_blocks
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/railties-5.0.0/lib/rails/engine.rb:457:in load_tasks
/home/vagrant/workspace/ruby/kuwata-summer/rakefile:6:in <top (required)>
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/rake-11.2.2/exe/rake:27:in <top (required)>
/home/vagrant/.rbenv/versions/2.3.1/bin/bundle:23:in load
/home/vagrant/.rbenv/versions/2.3.1/bin/bundle:23:in <main>
(See full trace by running task with --trace)
大写很重要。
Spreadsheet
已定义; SpreadSheet
不是。
这就是您的代码在尝试定义 SpreadSheet::Importer
.
时抛出错误的原因
...或者至少,根据我掌握的有限信息,看起来 是这样的。如果 Speadsheet
实际上没有在代码中的其他任何地方定义,那么您可以这样写:
module Spreadsheet # Can be a class, and can instead be SpreadSheet - as long as you're consistent!!
class Import
# ...
end
end
是的..你可以添加它自动加载,但另一种方法是通过 "require"
在 rake 文件中添加
这是另一种方式,
lib/spreadsheet/importer.rb
module Spreadsheet
class Importer
def initialize
@session = GoogleDrive.saved_session("#{Rails.root}/config/google_drive/config.json")
end
def exec(table_name)
#do something
end
end
end
lib/tasks/spreadsheet.rake
您需要使用 'reqire'
来包含文件
namespace :spreadsheet do
task :get => :environment do
require "#{Rails.root}/lib/spreadsheet/importer"
importer = Spreadsheet::Importer.new
importer.exec
end
end
快乐编码!!!!!
谢谢。
我是 RoR 的新手,正在尝试通过在 lib/spreadsheet 下创建一个导入器来创建一个从 google 电子表格导入数据库的任务。但是即使我根据 SOF 中的其他一些问题将 :environment 添加到任务中,rake 也找不到我的进口商。这是我的文件
lib/spreadsheet/importer.rb
class SpreadSheet::Importer
def initialize
@session = GoogleDrive.saved_session("#{Rails.root}/config/google_drive/config.json")
end
def exec(table_name)
#do something
end
end
lib/tasks/spreadsheet.rake
namespace :spreadsheet do
task :get => :environment do
importer = Spreadsheet::Importer.new
importer.exec
end
end
错误:
rake aborted!
NameError: uninitialized constant
SpreadSheet
/home/vagrant/workspace/ruby/kuwata-summer/lib/tasks/spreadsheet.rake:1:in
<top (required)>
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0 /gems/railties-5.0.0/lib/rails/engine.rb:654:in
block in run_tasks_blocks
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/railties-5.0.0/lib/rails/engine.rb:654:in
each
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/railties-5.0.0/lib/rails/engine.rb:654:in
run_tasks_blocks
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/railties-5.0.0/lib/rails/application.rb:443:in
run_tasks_blocks
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/railties-5.0.0/lib/rails/engine.rb:457:in
load_tasks
/home/vagrant/workspace/ruby/kuwata-summer/rakefile:6:in
<top (required)>
/home/vagrant/workspace/ruby/kuwata-summer/vendor/bundle/ruby/2.3.0/gems/rake-11.2.2/exe/rake:27:in
<top (required)>
/home/vagrant/.rbenv/versions/2.3.1/bin/bundle:23:in
load
/home/vagrant/.rbenv/versions/2.3.1/bin/bundle:23:in
<main>
(See full trace by running task with --trace)
大写很重要。
Spreadsheet
已定义; SpreadSheet
不是。
这就是您的代码在尝试定义 SpreadSheet::Importer
.
...或者至少,根据我掌握的有限信息,看起来 是这样的。如果 Speadsheet
实际上没有在代码中的其他任何地方定义,那么您可以这样写:
module Spreadsheet # Can be a class, and can instead be SpreadSheet - as long as you're consistent!!
class Import
# ...
end
end
是的..你可以添加它自动加载,但另一种方法是通过 "require"
在 rake 文件中添加这是另一种方式,
lib/spreadsheet/importer.rb
module Spreadsheet
class Importer
def initialize
@session = GoogleDrive.saved_session("#{Rails.root}/config/google_drive/config.json")
end
def exec(table_name)
#do something
end
end
end
lib/tasks/spreadsheet.rake
您需要使用 'reqire'
来包含文件namespace :spreadsheet do
task :get => :environment do
require "#{Rails.root}/lib/spreadsheet/importer"
importer = Spreadsheet::Importer.new
importer.exec
end
end
快乐编码!!!!!
谢谢。