错误声明“bcrypt-ruby不是捆绑包的一部分”,如何将bcrypt-ruby添加到Gemfile?

时间:2012-02-19 07:47:55

标签: ruby-on-rails ruby-on-rails-3

当我将has_secure_password添加到模型(继承自ActiveRecord :: Base)时,会出现错误,指出“bcrypt-ruby不是捆绑包的一部分”。

这里的日志是:

Started GET "/users" for 127.0.0.1 at 2012-02-19 16:37:12 +0900

Gem::LoadError (bcrypt-ruby is not part of the bundle. Add it to Gemfile.):
app/models/user.rb:3:in `<class:User>'
app/models/user.rb:1:in `<top (required)>'
app/controllers/users_controller.rb:1:in `<top (required)>'

我通过

安装了bcrypt-ruby
$ gem install bcrypt-ruby
Building native extensions.   This could take a while...
1 gem installed
Installing YARD (yri) index for bcrypt-ruby-3.0.1...
Installing RDoc documentation for bcrypt-ruby-3.0.1...

但无济于事。

我试过

$ bundle exec rails server

但没有帮助。

如果我注释掉“has_secure_password”这一行,则不会出现此错误。

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:23)

我已经在Gemfile中拥有gem 'bcrypt-ruby', '~> 3.0.0',并且已经运行了命令bundle,但我仍然收到了该消息。问题是我忘了重启服务器:

touch tmp/restart.txt

答案 1 :(得分:13)

正如消息所说,你需要将bcrypt-ruby添加到你的Gemfile中(在项目的根目录下)。

添加

gem "bcrypt-ruby"

然后运行bundle install应该做的伎俩(如果你还没有安装它,这将获取gem)。

您可以指定特定版本,例如

gem "bcrypt-ruby", "~> 3.0.1"

将为您提供最新版本,即&gt; =至3.0.1但小于3.1。你可能会这样做,如果3.0.1有一个你依赖的错误修复,你很高兴得到更多的错误修复但你不想要重大改变。 bundler网站上有更多信息。

答案 2 :(得分:6)

在你的Gemfile中添加一行

gem 'bcrypt-ruby'

然后从命令行

bundle install

答案 3 :(得分:2)

我想到的东西尚未解决。在进入安装了Ruby 2.0.x的新系统后,我收到了这个错误。

事实证明,即使我使用新的bcrypt 3.1.7,它也不适用于我,直到我在gemfile中有bcrypt-ruby 3.0.1。当我错误地接受错误时,我拒绝了。

宝石:

bcrypt (3.1.7 ruby x86-mingw32)
bcrypt-ruby (3.0.1 x86-mingw32, 3.0.0)

的Gemfile:

gem 'bcrypt-ruby', '~> 3.0.1'
gem 'bcrypt', '~> 3.1.7'

在添加两者之前,我尝试了各种单一版本组合。

答案 4 :(得分:1)

重启服务器并按正确的顺序重新安装捆绑包,即:

bundle install, bundle update, bundle install

然后重启服务器。

答案 5 :(得分:1)

如果您已将gem放入gem文件并安装了bundle,但仍然出现错误,请重新启动服务器。