无法制作rake任务文件并使其正常工作
问题描述:
我决定为我的Sinatra项目创建rake任务,而不是使用准备好的任务。无法制作rake任务文件并使其正常工作
#Rakefile
require 'rake/testtask'
require 'rake/clean'
Dir.glob("tasks/*.rake").each { |r| import r }
#/tasks/seed.rake
require 'rubygems'
require 'bundler'
Bundler.require
require 'mongoid'
require_relative '../models/user'
namespace :db do
task :seed do
puts 'Creating a user....'
user1 = User.new email: "[email protected]", password: "test123"
user1.save!
puts 'User has been created.'
end
end
#user.rb
require 'bcrypt'
require 'digest/md5'
require 'openssl'
class User
include Mongoid::Document
include Mongoid::Timestamps
#.........
#gemfile (partly)
source 'http://rubygems.org'
gem 'bcrypt-ruby', require: 'bcrypt'
而且我得到了“创建用户错误....
rake aborted!
undefined method `create!' for BCrypt::Password:Class
/home/alex/ruby_projects/service/models/user.rb:47:in `password='"
,其中#47看起来像
def password= pass
self.hashed_password = BCrypt::Password.create! pass, cost: 10
end
注意,在正常发育一切正常,只是罚款。所以我错过了需要一个文件,我想。
你的寿ughts?
p.s.即使我把
require 'bcrypt'
require 'digest/md5'
require 'openssl
到/tasks/seed.rake
错误仍然存在。
答
看来你使用的是从BCrypt :: Password不存在的方法。根据docs,只有一个.create
方法和没有.create!
方法。切换到BCrypt::Password.create
,它应该工作。
def password= pass
self.hashed_password = BCrypt::Password.create pass, cost: 10
end
“BCrypt :: Password.create!”方法在哪里定义?看看[BCrypt文档](http://bcrypt-ruby.rubyforge.org/classes/BCrypt/Password.html),我只看到'.create'方法,没有'.create!'。 – 2013-03-27 07:43:27
它解决了问题! – 2013-03-27 07:48:17