Rails Time.now - 1.month not working

r3b*_*00t 0 ruby ruby-on-rails

我正在尝试为我的Rails 2.3应用程序编写一个简单的脚本,但我遇到了一个问题.

当我开始rails console并键入Time.now - 1.month它时给出正确的输出:

>> Time.now - 1.month
=> Mon Dec 07 17:05:50 +0100 2015
Run Code Online (Sandbox Code Playgroud)

当我在文件(script/foo.rb)中使用相同的代码时,我得到错误

undefined method 'month' for 1:Fixnum (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

我也无法require从"lib"目录中获取文件.在Rails 2.3中,"lib"目录已经在里面了$LOAD_PATH.这个问题让我很头疼.希望有人可以帮助我.

以下是我的系统的详细信息:

$ which -a ruby
/usr/bin/ruby
/Users/rakesh/.rvm/rubies/ruby-1.8.7-p374/bin/ruby
Run Code Online (Sandbox Code Playgroud)

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

mar*_*ets 7

1.month 来自Active Support,而不是Ruby stdlib,因此您需要将此依赖项加载到脚本上下文中.

因此,如果要在整个Rails环境下运行此自定义脚本(加载所有依赖项),则应使用rails runner:

runner以非交互方式在Rails的上下文中运行Ruby代码

$ bin/rails runner path_to_your_script.rb
Run Code Online (Sandbox Code Playgroud)

在Rails 2中:script/runner.

另外,如果你只需要使用Active支持方法,尽量明确要求它:require 'active_support/core_ext/integer/time'你就可以不用加载Rails的全面运行脚本(无需使用亚军).