Rails Time.now - 1.month not working

时间:2016-01-07 16:14:42

标签: ruby-on-rails ruby

我正在尝试为我的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

同样的脚本在我朋友的机器上工作正常,所以我猜测我的电脑出了问题。

2 个答案:

答案 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"