Rails 3 runner 没有检测到 JSON gem?

Posted

技术标签:

【中文标题】Rails 3 runner 没有检测到 JSON gem?【英文标题】:Rails 3 runner not detecting JSON gem? 【发布时间】:2011-06-13 18:19:03 【问题描述】:

我正在尝试创建 Ruby 脚本以在我的 Rails 3 环境中运行。

但是,每当我使用 Rails Runner 运行此 ruby​​script 时,都会收到以下错误:

require 'rubygems'
require 'json'

@payload = 
"message" => "helloworld",
"station" => "id"=>12345
.to_json

puts @payload

错误:

/usr/lib/ruby/gems/1.8/gems/activesupport-3.0.0.beta4/lib/active_support/dependencies.rb:212:in `require': no such file to load -- json (LoadError)
 from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.0.beta4/lib/active_support/dependencies.rb:212:in `require'
 from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.0.beta4/lib/active_support/dependencies.rb:198:in `load_dependency'
 from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.0.beta4/lib/active_support/dependencies.rb:554:in `new_constants_in'
 from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.0.beta4/lib/active_support/dependencies.rb:198:in `load_dependency'
 from /usr/lib/ruby/gems/1.8/gems/activesupport-3.0.0.beta4/lib/active_support/dependencies.rb:212:in `require'
 from createflags.rb:2
 from /usr/lib/ruby/gems/1.8/gems/railties-3.0.0.beta4/lib/rails/commands.rb:39:in `eval'
 from /usr/lib/ruby/gems/1.8/gems/railties-3.0.0.beta4/lib/rails/commands/runner.rb:47
 from /usr/lib/ruby/gems/1.8/gems/railties-3.0.0.beta4/lib/rails/commands.rb:39:in `require'
 from /usr/lib/ruby/gems/1.8/gems/railties-3.0.0.beta4/lib/rails/commands.rb:39
 from script/rails:6:in `require'
 from script/rails:6

谁能告诉我我能做些什么来解决这个问题?

【问题讨论】:

gem 列表正确显示:json (1.4.6, 1.4.3) & json_pure (1.4.6, 1.4.3)。该脚本使用“ruby scriptName.rb”可以正常运行,但不能使用“rails runner script.rb” 【参考方案1】:

我并不完全熟悉 Bundler 的内部结构,但可能是它不允许 requireing 其他不在 Gemfile 中的 gem。也许添加gem 'json' 会解决这个问题。

当然,ActiveSupport 有自己的 JSON 模块,所以应该不需要再引入另一个 gem。

【讨论】:

【参考方案2】:

去掉 require "json" 然后试试。我相信 ActiveSupport 已经内置了 to_json。

【讨论】:

以上是关于Rails 3 runner 没有检测到 JSON gem?的主要内容,如果未能解决你的问题,请参考以下文章

heroku推送Rails 3.2应用时突然出现 "无法检测到RACK任务 "的情况(无其他错误)。

Ruby on Rails 中的 Runner

从 rails runner 内部触发/订阅 websocket-rails 事件

使用一些参数运行 rails runner

Ruby 对象到 json (没有 rails)

Rails 4 - 在生产服务器上预编译资产后没有 manifest.json