如何服务于轨道静态JSON文件?

问题描述 投票:8回答:4

我有我的服务器上的文件,该文件是我的应用程序目录之外。这是保存JSON对象的文本文件,/path/to/data.json

什么是服务于Rails的这个文件最简单的方法,例如返回它在响应GET请求?

这是我到目前为止已经试过,通过this answer和他人的启发。 (这可能是遥远基地 - 我是新来的轨道。)

  1. 加入此行的routes.rb resources :data
  2. 写以下数据controller.rb

class DataController < ApplicationController

@data = File.read("/path/to/data.json")

def index
  render :json => @data
 end
end

这是行不通的。当我直接把我的浏览器http://myserver.com/data.json我只看到“空”,而不是data.json文件。

任何想法,我做错了什么?

ruby-on-rails json
4个回答
14
投票

我认为这是一个范围的问题;你的外@data是不一样的方法@data。也就是说,你不能使用实例变量如预期的方法之外,因为没有实例呢。

它应该工作,如果你使用一个类变量,如

@@data = File.read("/path/to/data.json")

然后

render :json => @@data

8
投票

把它放在public/assets/javascripts。或app/assets/javascripts。该服务器甚至可能返回正确的内容类型。


4
投票
  • 把“data.json”文件到你的项目目录(例如“公共/ data.json”)
  • @data = File.read( “#{Rails.root} /public/data.json”)
  • 最后但并非最不重要渲染:JSON => @data

0
投票

你也可以做到在同一行,例如

render :file => '/path/to/data.json', 
  :content_type => 'application/json',
  :layout => false