安装Gem但在rails服务器启动时失败

时间:2015-12-01 01:49:16

标签: ruby-on-rails ruby gem nokogiri bcrypt

我遇到了bcrypt gem的问题。我跑了这个:

gem install bcrypt

得到了:

Fetching: bcrypt-3.1.10-x64-mingw32.gem (100%)
Successfully installed bcrypt-3.1.10-x64-mingw32
Parsing documentation for bcrypt-3.1.10-x64-mingw32
Installing ri documentation for bcrypt-3.1.10-x64-mingw32
Done installing documentation for bcrypt after 0 seconds
1 gem installed

我可以在列表中看到已安装的gem:

bcrypt (3.1.10 x64-mingw32)

当我启动Rails时:

rails server

我收到了一个错误(我只是粘贴一个标题以保持清洁):

C:/Ruby/lib/ruby/gems/2.2.0/gems/bcrypt-3.1.10-x64-mingw32/lib/bcrypt.rb:16:in `require': cannot load such file -- bcrypt_ext (LoadError)

我使用Windows和Ruby 2.2。 DevKit已安装。环境变量已设置:

  • PATHC:\Ruby\devkit\mingw\bin;C:\Ruby\devkit\bin
  • RI_DEVKITC:\Ruby\devkit

为了验证它,我跑了:

make --version

得到了:

GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i686-pc-msys

对我来说似乎很好。

Nokogiri也出现了类似的问题。

有什么问题?

1 个答案:

答案 0 :(得分:2)

我做了一些研究,得到了答案:

bcrypt-3.1.10-x64-mingw32 检测到Ruby平台。然后它会自动创建最终看起来像这样的gem的名称:

gem install bcrypt --platform=ruby

这个gem应该有这个特定平台的预编译版本,但是,对于Ruby 2.2,没有编译的bcrypt_ext.so。 2.1是支持导致问题的最后一个版本。在这种情况下,有两种解决方案:

  1. 只需使用DevKit重新编译gem:

    class Graph {
    
    
    public:
    
        std::vector<std::vector<int>> adj;
    
        Graph(int V) {
            std::vector<std::vector<int> > adj(V, std::vector<int>());
        }
    
        void insert_edge(int v, int u);
        void print_adjacencylist();
    
    
    };
    
    
    void Graph::insert_edge(int v, int u) {
    
    adj[v].push_back(u);
    
    
    }
    

    将编译源并创建所需的bcrypt_ext.so。

  2. 将Ruby降级为2.1。

  3. 同样的逻辑是Nokogiri。

    我希望它有所帮助。