无法制作rake-tasks文件并使其正常工作

时间:2013-03-27 07:35:39

标签: ruby sinatra rake

我决定为我的Sinatra项目创建一个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: "email1@gmail.com", 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

请注意,在正常开发中,一切都可以精细。所以我错过了我想要的文件。

你的想法?

P.S。即使我把

   require 'bcrypt'
    require 'digest/md5'
    require 'openssl

/tasks/seed.rake错误仍然存​​在。

1 个答案:

答案 0 :(得分:1)

您似乎正在使用BCrypt :: Password中不存在的方法。根据{{​​3}},只有.create方法,没有.create!方法。切换到BCrypt::Password.create,它应该可以正常工作。

def password= pass
  self.hashed_password = BCrypt::Password.create pass, cost: 10
end