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)
同样的脚本在我朋友的机器上工作正常,所以我猜我的电脑出了问题.
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的全面运行脚本(无需使用亚军).
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |