我们在Rails应用程序内的vendor / cache目录中安装了一个邮件gem。
该脚本名为“test”,不在Rails应用程序目录中。
#! /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby
require 'date'
require 'fileutils'
require 'openssl'
require 'yaml'
require 'mail'
require 'dalli'
当我从Rails应用程序外部执行此脚本时,出现以下错误。
/usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mail (LoadError)
from /usr/local/rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
我只是在标准的Ruby路径中重新安装了这些宝石(mail,dalli)并且它有效,但这并不理想。
当我们尝试在Rails应用程序之外运行此脚本时,我们需要什么才能找到这些已安装的gem?换句话说,我们如何指定这些宝石的路径?
答案 0 :(得分:1)
确保您的gem都在Gemfile中声明:
gem 'mail'
如果您不希望默认加载它们,并且仅在需要时加载它们,则可以使用您正在使用的require
语句,并在Gemfile中添加:require => false
:
gem 'mail', :require => false
当您从Rails环境外部调用脚本并想加载gem时,请在bundle exec
之前为脚本添加前缀:
bundle exec my_script.rb
如果您需要从rails的应用程序根目录以外的其他位置运行脚本,则必须运行:
BUNDLE_GEMFILE=/path/to/your/app/Gemfile bundle exec your_script
请注意,如果您的脚本或宝石在rails应用的路径中查找文件,这可能会导致路径问题