为啥我无法加载此类文件?
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 范围之外进一步查找。对你有帮助吗?以上是关于为啥我无法加载此类文件?的主要内容,如果未能解决你的问题,请参考以下文章
将帮助文件加载到 FactoryBot 文件中会导致“无法加载此类文件”[重复]