【问题标题】:Rails - Using Tempfile to write on Heroku?Rails - 使用 Tempfile 在 Heroku 上编写?
【发布时间】:2010-12-05 00:06:47
【问题描述】:

我需要能够编写一个临时文件,仅在请求期间使用。

在本地我可以成功使用以下:

    tempfile = File.open(a.original_filename,'w')
    tempfile.write_nonblock(a.body)        
      paperclip stuff........
    tempfile.close 

这很好用,但在 Heroku 上不行……我怎样才能在 Heroku 的限制下完成上述操作:link text

我不明白如何将以上内容翻译成:#{RAILS_ROOT}/tmp/myfile_#{Process.pid}

感谢您在此处提供的任何帮助。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 heroku


    【解决方案1】:

    你试过tempfile = File.open("#{RAILS_ROOT}/tmp/myfile_#{Process.pid}",'w')吗?


    正确的语法是tempfile = File.new("#{RAILS_ROOT}/tmp/myfile_#{Process.pid}",'w')(见cmets)

    【讨论】:

    • 我还没有尝试过,但可以..问题是我需要在生产中而不是在本地...关于如何解决这个问题的任何想法?
    • 我很欣赏这个建议,但是我需要它的 myfile_ 是 a.original_filename
    • 试过这个 tempfile = File.open("#{RAILS_ROOT}/tmp/#{a.original_filename}",'w') 错误为 "Errno::ENOENT (没有这样的文件或目录- biz-stone.jpg): "
    • 其实应该是 tempfile = File.new("#{RAILS_ROOT}/tmp/#{a.original_filename}",'w') :你需要创建文件。另外,您可以测试Rails.env.production? 为生产环境设置不同的临时文件路径。
    • @David 谢谢,我想我已经到了可以创建和编写文件的地步,现在我需要弄清楚如何通过 ":attachment => File 在回形针中读取它。 open(tempfile.read)" 但这是错误的
    【解决方案2】:

    如果你必须用回形针做事,我有一个解决方案。将此类作为 heroku_compliant_file.rb 包含在您的 lib 文件夹中

    class HerokuCompliantFile < StringIO
      def initialize(str,filename,content_type)
        @original_filename = filename
        @content_type = content_type
        super(str)
      end
    end
    

    在包含回形针的模型中 -

    def insert_a_hunk_of_string_into_paperclip(some_object)
      f = HerokuCompliantFile.new(some_object.render,"myfile_#{Process.pid}","application/pdf")
      self.paperclip_model = f
      save
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-13
      • 2010-10-25
      • 2023-03-31
      • 2013-08-15
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多