2013-03-27 89 views
1

我決定爲我的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錯誤仍然存​​在。

+1

「BCrypt :: Password.create!」方法在哪裏定義?看看[BCrypt文檔](http://bcrypt-ruby.rubyforge.org/classes/BCrypt/Password.html),我只看到'.create'方法,沒有'.create!'。 – 2013-03-27 07:43:27

+0

它解決了問題! – 2013-03-27 07:48:17

回答

1

看來你使用的是從BCrypt :: Password不存在的方法。根據docs,只有一個.create方法和沒有.create!方法。切換到BCrypt::Password.create,它應該工作。

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