1

在我的虚拟主机系统上,安装和使用 gems 似乎需要安装我自己的 ruby​​ 副本。在他们在论坛上的帮助下,我已经完成了。我正在尝试在 Rails 应用程序中使用特定的 gem(称为 Image Science)。

此时,如果我打开irb并输入以下内容,这就是我得到的:

require 'rubygems' #true
require 'image_science' #LoadError: libfreeimage.so.3: cannot open shared 
                         #object file: No such file or directory (etc)....

根据主持人的建议,我回到 bash 并输入以下内容:

export LD_LIBRARY_PATH=~/ruby1.8/lib

该命令允许 irb 要求image_science- 它返回“真”。据我了解,它的意思是,“嘿,还要在这个目录中查找宝石。”

问题是这不会改变我的 Ruby 脚本可以访问的内容。(它也只在会话中持续存在,但我想我可以将它添加到我的.bashrc.)在我的 Rails 应用程序中,如果我尝试要求该 gem,我仍然会收到错误消息。

所以我有两个问题

  1. 如何使这个 gem 可用于我的 Ruby 脚本 - 特别是 Rails 模型文件?
  2. 我什至需要将“require”命令放在模型文件中,还是有其他方式可以加载 gem?
4

1 回答 1

3

如果 gem 只被一个模型使用,我通常只需要该模型上的“gem”。如果应用程序要使用 gem,比如在视图或控制器中,我会创建一个名为 app.rb 的文件并将其粘贴到包含所有要求语句的 config/initializers 中。您还可以将它包含在初始化程序块内的 config/environment.rb 中:

config.gem 'pg', :lib => 'pg'

这将在项目加载之前需要该gem,但是,对于某些gem(例如ruby facets),我遇到了麻烦。

对于 LD_LIBRARY_PATH,将其放入 config/environments/*.rb 文件之一(为您的环境定制,但开发很可能与生产不同)

ENV['LD_LIBRARY_PATH'] = "#{ENV['LD_LIBRARY_PATH']}:#{ENV['JAVA_HOME']}/jre/lib/amd64:#{ENV['JAVA_HOME']}/jre/lib/amd64/server"
于 2010-03-05T15:05:33.877 回答