【发布时间】:2012-08-04 14:37:03
【问题描述】:
我正在尝试编写一种非常简单的方法,让用户将 html 文件添加到我的 Heroku 应用程序中。这些文件将保存在 ./log 中以供稍后渲染。我已经在本地测试了我的代码(在开发和生产中),但是当我尝试在我的 Heroku 托管存储库上上传文件时,我收到内部服务器错误 500。
控制器上传.rb:
class UploadController < ApplicationController
def index
render :file => 'upload/uploadfile.haml'
end
def uploadFile
file_param = params[:upload][:datafile]
post = DataFile.save(file_param)
render :text => "File has been uploaded successfully"
end
end
模型 data_file.rb:
class DataFile < ActiveRecord::Base
def self.save(upload)
# Changed Default Destination: [__RAILS_DIR__/log]
name = "./log/" + upload.original_filename
# can haz data directory?
require 'FileUtils'
FileUtils.mkdir_p(File.dirname(name))
File.open(name, "wb") { |f| f.write(upload.read) }
end
end
查看uploadfile.haml:
%h1 File Upload
= form_for :upload,:url=>{:action => 'uploadFile'},:html => { :multipart => true } do |f|
%p
%label{:for => "upload_file"} Select File
\:
\#{f.file_field 'datafile'}
= f.submit "Upload"
heroku 日志:
2012-08-07T14:13:20+00:00 app[web.1]: Started POST "/uploadFile" for 69.29.117.99 at 2012-08-07 14:13:20 +0000
2012-08-07T14:13:20+00:00 app[web.1]: Processing by UploadController#uploadFile as HTML
2012-08-07T14:13:20+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"1dAXkMulNR0d8S/l6QC8JnpSDtNBaHoyKJezgnheR10=", "upload"=>{"datafile"=>#>}, "commit"=>"Upload"}
2012-08-07T14:13:20+00:00 app[web.1]: Completed 500 Internal Server Error in 3ms
2012-08-07T14:13:20+00:00 app[web.1]:
2012-08-07T14:13:20+00:00 app[web.1]: LoadError (no such file to load -- FileUtils):
2012-08-07T14:13:20+00:00 app[web.1]: app/models/data_file.rb:7:in save'
2012-08-07T14:13:20+00:00 app[web.1]: app/controllers/upload_controller.rb:8:inuploadFile'
2012-08-07T14:13:20+00:00 app[web.1]:
2012-08-07T14:13:20+00:00 app[web.1]:
2012-08-07T14:13:20+00:00 app[web.1]: cache: [POST /uploadFile] invalidate, pass
heroku:http://upload-example.herokuapp.com/
github:https://github.com/halterj1/upload
请不试图说服我使用回形针或载波,这并不能回答我的问题。任何帮助都将非常感谢,在此先感谢各位!
【问题讨论】:
-
我重新阅读了 devcenter.heroku.com/articles/read-only-filesystem,我想我可能误解了 ./log 的用途我也在 devcenter.heroku.com/articles/s3 上阅读过,如果我理解正确,使用 Amazon S3 将不允许我使用外部 html 部分。因此,我现在对如何完成外部html部分上传感到茫然。
-
是否需要后端解析?可能是 ajax 调用可以在 FED 上处理。是什么让你不使用数据库?在您的假设中,这些 html 文件可以有多大?脚本删除?
-
是的,需要解析 html 文件,因为它们将在其他应用程序侧页面中用作部分(它们将需要呈现 html 代码)。而且我没有使用我的数据库,因为我不知道如何调用存储在我的数据库中的部分,或者是否可能。
标签: ruby-on-rails heroku uploading fileutils