Rails文件的位置和访问权限

时间:2015-08-21 11:21:18

标签: ruby-on-rails

我的根是site/home/ubuntu/workspace/

  1. 是否可以在workspace/内访问文件(来自浏览器的HTTP请求),而无需配置路由和控制器?
  2. 1)上的问题是否取决于文件扩展名?

3 个答案:

答案 0 :(得分:0)

我有这个结构:

# /home/username/Workspace/rails_project/app/controllers/application_controller.rb
require "#{Rails.root}/../test.rb

# /home/username/Workspace/test.rb
# Some ruby code

如您所见,test.rb文件位于RubyOnRails项目之外。

出于安全原因,您无法在不定义路径的情况下从URL访问项目轨道外的文件。您可以做的是指向控制器的路径,该路径基于url提供的文件名,需要在rails项目之外的文件。

# /home/username/Workspace/rails_project/config/routes.rb
get '/get_file/:file_name', to: 'files#show'

# /home/username/Workspace/rails_project/app/controllers/files_controller.rb
class FilesController < ApplicationController
    def show
        document = params[:file_name]
        send_data "#{Rails.root}/../#{document}, filename: document
    end
end
  

有关详细信息,请参阅:   http://api.rubyonrails.org/classes/ActionController/DataStreaming.html#method-i-send_data

答案 1 :(得分:0)

您可以像这样访问文件的路径:

File.expand_path("somestuff.rb", "~/workspace")

对我来说,这段代码产生的路径如下:

"/home/foodie/workspace/somestuff.rb"

答案 2 :(得分:0)

如果不配置路由和控制器,客户端只能访问public/目录中的文件(扩展名是什么并不重要)。

请记住:当您的Rails应用程序由Web服务器运行时,其webroot将成为公共目录,因此访问public/file.ext您请求的应该是webroot/file.ext