我正在尝试为我的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)
我也无法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
同样的脚本在我朋友的机器上工作正常,所以我猜我的电脑出了问题.
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支持方法,尽量明确要求它:require 'active_support/core_ext/integer/time'
你就可以不用加载Rails的全面运行脚本(无需使用亚军).