Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 您如何准确使用机架';s环境哈希?_Ruby_Ruby On Rails 4_File Upload_Rack - Fatal编程技术网

Ruby 您如何准确使用机架';s环境哈希?

Ruby 您如何准确使用机架';s环境哈希?,ruby,ruby-on-rails-4,file-upload,rack,Ruby,Ruby On Rails 4,File Upload,Rack,我有一个Rails 4.2应用程序,文件上传流量很大 我想覆盖rack.multipart.tempfile\u工厂,以便在接受文件上载时提供与rack在引擎盖下创建的临时文件相关的附加行为 那么,在哪里以及如何准确地更改机架的envhash?尝试在初始值设定项中执行env['''']=…,表示env未定义。将其更改为ENV会引发一个错误,说明它无法将lambda转换为字符串(rack.multipart.tempfile\u factory需要lambda,因此我不能将其更改为字符串)。在控制

我有一个Rails 4.2应用程序,文件上传流量很大

我想覆盖
rack.multipart.tempfile\u工厂
,以便在接受文件上载时提供与rack在引擎盖下创建的临时文件相关的附加行为

那么,在哪里以及如何准确地更改机架的
env
hash?尝试在初始值设定项中执行
env['''']=…
,表示
env
未定义。将其更改为
ENV
会引发一个错误,说明它无法将lambda转换为字符串(
rack.multipart.tempfile\u factory
需要lambda,因此我不能将其更改为字符串)。在控制器方法中使用
request.env
没有任何效果。我通过复制粘贴货架工厂的一行代码,并在一个固定路径的文件中添加一个随机数来测试最后一个;在上传了一些文件之后,这个文件从一开始就没有被创建过,所以就这样吧

我正在寻找一个正式的解决方案,并没有打算猴子补丁架。它的规格说明这是可能的,那么我应该怎么做呢

当然,如果一切都失败了,我会求助于黑客,但我更愿意先听听官方的做法

(在我们讨论这个问题的同时,您能否推荐一种无gemless解决方案来覆盖
rack.hijack_io
,并提供一些真实的例子?搜索这个东西并没有多大帮助,似乎没有人提供端到端的工作解决方案,只有位和块)

感谢您的考虑。

第1部分:如何修改机架的
env
您只需覆盖
应用程序#调用
。在
config/application.rb
(或
config/environments/production.rb
中,如果愿意,可以添加以下方法:

class Application < Rails::Application
  ...
  def call(env)
    env["rack.multipart.tempfile_factory"] = ->(what, now) { "lambda time" }
    super(env)
  end
  ...
end
它不仅仅是一个机架变量,它是一个Ruby常量

“无法将lambda转换为字符串”错误是因为所有
ENV
值都必须是字符串。所以即使你这么做了

$ export MY_VAR=42
你会得到

irb> ENV['MY_VAR'] #=> "42"

其中,
“42”
是一个字符串,而不是整数。

我知道我很愚蠢,这只是其中的一天,你会非常生气,你自己无法想出这么简单的事情,你会更加生气,从而失去所有实际解算它的能力。谢谢。RE:第二部分,我知道ENV是什么,我只是太沮丧了,所以决定试一试(很清楚它不会起作用,哈哈)。谢谢你全面的回答。我欠你20瓶啤酒。别担心,我也这么想了,不过为了完整起见,我想增加第二部分。挖起来很有趣,因为我自己还没有真正进入铁轨的那一边太远。
irb> ENV['MY_VAR'] #=> "42"