Sinatra图像文件列表适用于localhost,但不适用于测试服务器

时间:2014-11-03 13:28:57

标签: ruby sinatra thin

下面的代码从public / images目录中获取图像列表,创建一个哈希数组并将其转换为JSON,然后返回给调用者。

代码在本地主机上完美运行 - 我根据需要获取图像名称列表。

然后我将代码上传到我的VPS并在相同的环境中运行,在瘦身上运行,根本没有返回任何内容。无论我改变什么,获取文件名的路径或方法,例如使用glob而不仅仅是Dir,我尝试的都没有用。

以下是我使用Ajax从客户端JavaScript调用的路由中的代码:

# get all images
get '/debug/posts/images/' do
  puts '>> debug > posts > images > get'

  all_images = Array.new

    # build substitute prefix path 
  uri = URI(request.url)
  prefix ='http://' + uri.host
  if request.port
    prefix += ':' + request.port.to_s
  end
  prefix += '/content/'

  begin
    content_type :json
        # get list of images
    pics = Dir['public/images/*']
    pics.map { |pic|
            # build hash for use with tinyMCE
      pic.split('/')
      pic_hash = {:title => File.basename(pic).to_s, :value => prefix + File.basename(pic).to_s}
      all_images.push(pic_hash)
    }

        # convert to json
    pic_json = JSON.generate(all_images)    
    body(pic_json)
  rescue Sequel::Error => e
    puts e.message
    status(400).to_json
  end
end

我在localhost上运行了一系列值:

[ {title: "bear-love.jpg"value: "/content/bear-love.jpg"}, {title: "bear-love2.jpg"value: "/content/bear-love2.jpg"}...]

我从VPS获得一个空数组:

[]

2 个答案:

答案 0 :(得分:1)

  1. 检查服务器是否以具有读取和执行公共/图像权限的用户身份运行
  2. 验证公共/图片是否存在
  3. 验证公众/图像是否符合您的想象。

答案 1 :(得分:0)

事实证明,在服务器上获取当前路径更容易,只需获取我需要的图像文件名列表,只需添加我的前缀路径即可在浏览器中使用。