为啥我无法加载此类文件?

Posted

技术标签:

【中文标题】为啥我无法加载此类文件?【英文标题】:Why do I get cannot load such file?为什么我无法加载此类文件? 【发布时间】:2015-01-01 23:42:18 【问题描述】:

我需要使用 ffi gem 来访问本机扩展。 当我在一个简单的 ruby​​ 脚本中需要 'ffi' 时,它可以正常工作。但是当我在我的 Rails 应用程序中需要 ffi 时,我得到:无法加载此类文件 -- ffi 为什么?

gem env 显示:

RubyGems 环境:

RUBYGEMS 版本:2.2.2 RUBY 版本:1.9.3(2012-04-20 补丁级别 194)[x86_64-linux] 安装目录:/usr/lib/ruby/gems/1.9.1 RUBY 可执行文件:/usr/bin/ruby1.9.1 可执行目录:/usr/bin 规范缓存目录:/home/adminuser/.gem/specs RUBYGEMS 平台: 红宝石 x86_64-linux 宝石路径: /usr/lib/ruby/gems/1.9.1 /home/adminuser/.gem/ruby/1.9.1

【问题讨论】:

打包器中是否安装了 gem? 【参考方案1】:

在您的 Gemfile 中添加这一行:

gem 'ffi'

下一步:

$ bundle install

现在:

require 'ffi'

您需要在 Gemfile 中指定要使用的 gem,以便通过 bundler 将其用于 Rails 项目。

更新:我建议您查看How does bundler bundle、how bundler require gems 和这个railscast。

【讨论】:

好的,但是为什么呢?为什么 ruby​​ 脚本能够加载 gem 而 Rails 不能? 我想我在您的第二个链接中找到了答案:“为了防止 Kernel#require 进一步查看其他已安装的 gem,Bundler 还通过恢复到原始实现来禁用修补的 Kernel#require 。”对吗? Bundler 将 gems 及其版本限制在 Gemfile 中定义的提到的列表中,这是的,限制 Kernel#require 以在提供的 gems 范围之外进一步查找。对你有帮助吗?

以上是关于为啥我无法加载此类文件?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby:无法加载此类文件 - LoadError

将帮助文件加载到 FactoryBot 文件中会导致“无法加载此类文件”[重复]

无法加载此类文件 -- openssl (LoadError)

LoadError: 无法加载此类文件 -- 目录/文件名

机架错误 - LoadError:无法加载此类文件

Sinatra 应用程序中的“Rake 无法加载此类文件”错误