1

我决定为我的 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

请注意,在正常开发中一切正常。所以我错过了要求我认为的文件。

你的意见?

ps 即使我把

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

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

4

1 回答 1

1

看来您正在使用 BCrypt::Password 中不存在的方法。根据文档,只有.create方法,没有.create!方法。切换到BCrypt::Password.create它应该可以工作。

def password= pass
  self.hashed_password = BCrypt::Password.create pass, cost: 10
end
于 2013-03-27T07:49:52.647 回答