【问题标题】:Displaying .txt file with Ruby Sinatra使用 Ruby Sinatra 显示 .txt 文件
【发布时间】:2014-04-27 06:33:53
【问题描述】:

我只想将位于我的公共目录中的 .txt 文件显示到页面上。我很抱歉这可能看起来很新手,但我是 Ruby 新手。

到目前为止,ruby sinatra 代码如下:

get '/create' do
    logfile = File.open("logfile.txt")
    erb :create
end

erb 显示:

<h2>Text file:</h2>
<%= logfile %>

谁能告诉我在我的页面上显示这个文本文件需要什么?

【问题讨论】:

标签: ruby sinatra


【解决方案1】:

Sinatra(不带erb)显示.txt 文件的另一种方式。
在你的脚本中:

get '/' do
  send_file 'views/file.txt'
end

file.txt 与内容放在一起:

Heloo ! somebody here?


【讨论】:

  • 如何在.erb查看页面打印?您正在更改 OP 的文件系统或项目结构。该文件是 public 文件夹。
  • 请求 OP Can someone tell me what I need to display this text file on my page?
  • 如果 OP 想要的只是文本,这是最简单的方法。如果他想将其合并为页面的一部分,则需要一个视图。
  • @MarkThomas 我完全同意。只是另一种方式。
  • 人们投票支持你的意思是,我不正确。您能否解释一下您的代码如何在 .erb 视图页面中显示文本文件?我真的很想得到解释。
【解决方案2】:

我认为你的目标是这样的:

get '/create' do
    @logfile = File.read("logfile.txt")
    erb :create
end

在 Erb 中:

<h2>Text file:</h2>
<%= @logfile %>

(请注意,我可能还会将其放入 div 并应用 overflow: auto 样式)

【讨论】:

  • 是的.. 没关系.. +1
  • 对不起,我看错了..我把File.read("logfile.txt")读成File.readlines("logfile.txt")....
【解决方案3】:

你可以这样做:

sinatra 代码:

get '/create' do
    @logfile = File.open("logfile.txt","r")
    erb :create
    @logfile.close
end

文件.erb

<h2>Text file:</h2>
<% @logfile.each_line do |line| %>
  <%= line %>
<% end %>

或者你可以使用File#read

文件.erb

<h2>Text file:</h2>
<%= @logfile.read %>

【讨论】:

  • 这会使文件在整个 HTTP 请求中保持打开状态。这本身不一定是一个问题,但是当我没有看到明确的结束时,我个人会感到紧张。 (我更喜欢块形式的open 或者在这种情况下read 而不是)。
  • @MarkThomas 确实很好。我是这样做的,因为我不知道文件内容,所以我想让文件作为对象传递给 erb。然后在视图内部,我将阅读这些行。现在的重点是,我需要关闭文件。如果我把@logfile.close 放在erb :create 之后,希望它有意义。我说的对吗?
【解决方案4】:

this 之后应用了一个安全的解决方案,因为我需要在我的其他 HTML 中输出文本文件。

require 'rack/utils'

get '/logfile' do
    File.open('./public/log.txt','r') do |file|
        @logtext = Rack::Utils.escape_html(file.read) # this will assure security
    end
    erb :logfile
end

views/logfile.erb

<h1>Log file</h1>
<pre><%= @logtext %></pre>

假设我们的日志不如我们的站点代码安全,并且某个坏人做了坏事:

[INFO] User Admin successfully logged in.
[ERROR] User Frog failed to log in.
</pre><script>alert('Do harmful thing!')</script>
[INFO] User Admin successfully logged in.

输出将是上面的文本(没有弹出消息)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多