我正在尝试为我的Rails 2.3应用程序编写一个简单的脚本,但我遇到了一个问题。
当我启动rails console
并输入Time.now - 1.month
时,它会提供正确的输出:
>> Time.now - 1.month
=> Mon Dec 07 17:05:50 +0100 2015
当我在文件(script / foo.rb)中使用相同的代码时,我得到错误
undefined method 'month' for 1:Fixnum (NoMethodError)
我也无法从“lib”目录中require
个文件。在Rails 2.3中,“lib”目录已在$LOAD_PATH
内。这个问题让我很头疼。希望有人可以帮助我。
以下是有关我系统的详细信息:
$ which -a ruby
/usr/bin/ruby
/Users/rakesh/.rvm/rubies/ruby-1.8.7-p374/bin/ruby
同样的脚本在我朋友的机器上工作正常,所以我猜测我的电脑出了问题。
答案 0 :(得分:7)
1.month
来自Active Support,而非Ruby stdlib,因此您需要将此依赖项加载到脚本上下文中。
因此,如果要在整个Rails环境下运行此自定义脚本(加载所有依赖项),则应使用rails runner
:
runner 以非交互方式在Rails的上下文中运行Ruby代码
$ bin/rails runner path_to_your_script.rb
在Rails 2中:script/runner
。
或者,如果您只需要使用Active Support方法,请尝试明确要求它:require 'active_support/core_ext/integer/time'
并且您将能够在不完全加载Rails的情况下运行脚本(无需使用 < EM>转轮 强>)。
答案 1 :(得分:0)
Rails Active Support Core扩展已将month
方法添加到Integer
类。
如果您希望在独立的Ruby脚本中使用该方法,则需要相关文件。
require "active_support/core_ext/integer/time"
p Time.now - 1.month
#=> 2015-12-07 22:21:13 +0530
您还可以使用
加载所有扩展程序require "active_support/all"