HAML运行内联Ruby,但不渲染任何内容

HAML运行内联Ruby,但不渲染任何内容,ruby,sinatra,haml,padrino,Ruby,Sinatra,Haml,Padrino,我有一个类似上面的haml,我正在Sinatra应用程序中使用它。当我运行我的应用程序时 -#encoding: utf-8 :css .hidden{display:none;} %script{:src=>"/javascripts/jquery.js"} %form{:action=>"https://get724.ccvb.com.tr/Get724/get724uye.aspx",:method=>"post"} %input.hidden{:type=>"

我有一个类似上面的haml,我正在Sinatra应用程序中使用它。当我运行我的应用程序时

-#encoding: utf-8
:css
 .hidden{display:none;}
%script{:src=>"/javascripts/jquery.js"}
%form{:action=>"https://get724.ccvb.com.tr/Get724/get724uye.aspx",:method=>"post"}
 %input.hidden{:type=>"text",:name=>"uyeno",:value=>""}
 %input.hidden{:type=>"text",:name=>"kkno",:value=>""}
 %input.hidden{:type=>"text",:name=>"gectar",:value=>""}
 %input.hidden{:type=>"text",:name=>"tutar",:value=>""}
 %input.hidden{:type=>"text",:name=>"dcins",:value=>""}
 %input.hidden{:type=>"text",:name=>"sipbil",:value=>""}
 %input.hidden{:type=>"text",:name=>"sesbil",:value=>""}
 %input.hidden{:type=>"text",:name=>"burl",:value=>""}
 %input.hidden{:type=>"text",:name=>"hurl",:value=>""}
 - t = Time.now.strftime("%Y%m%d%H%M%S")
 - puts t
 %input.hidden{:type=>"text",:name=>"zaman",:value=>"#{t}"}
 -puts "adfasdf : " + @asdf.to_s
 -puts "asdf"
 -puts "asdf : " + @asdf.to_s
 -puts session[:ewer]
 -puts session[:zxcv]
 -puts strtodigest
 -digest = Digest::SHA1.base64digest(strtodigest)
 -puts digest
 -#%input{:type=>"text",:value=>"#{strtodigest}"}
 -#%input{:type=>"text",:value=>"#{digest}"}
 %input.hidden{:type=>"text",:name=>"ozet",:value=>"#{digest}"}
:javascript
  $('form').submit();
-puts "End Of Haml"
每一个ruby命令都可以完美地工作,但是haml不会呈现任何东西。甚至连一行都没有,但是每个ruby命令都以“-”开头,这样做绝对完美吗?原因可能是什么? 请不要回答“因为隐藏类隐藏了一切”,它不是关于css隐藏的,从字面上说,甚至连服务器返回的一个字节都没有

编辑:

我之前说过该应用程序是sinatra应用程序,但实际上是Padrino应用程序。虽然padrino只是在主要sinatra应用程序中运行的几个sinatra应用程序,而且更多的人知道sinatra,但我说sinatra是为了让问题更简单

下面是调用haml的代码

haml :problem_haml

它还可以毫无问题地将puts命令写入控制台。

您可以使用chrome开发工具、firebug或类似工具(检查POST)检查表单是否已提交,如果已提交,因为有POST请求您需要处理响应,只需猜测一下:)

您的代码适合我,尽管首先我得到:

def get3DSecure(ccname,price,skul,ccno,cvc)
    puts "#############################################"
    puts "get3DSecure function called"
    puts "#############################################"
    @ccname = ccname
    @price = price.to_s + "00"
    @skul = skul
    @ccno = ccno
    @cvc = cvc
    session[:name] = ccname
    session[:xmltosend] = makeXmlFor3D
    session[:sipbil] = UUIDTools::UUID.random_create.to_s.delete!("-")
    session[:sesbil] = UUIDTools::UUID.random_create.to_s.delete!("-")
    session[:skul] = skul
    session[:price] = price
    session[:ccno] = ccno
    session[:cvc] = cvc
    puts "#############################################"
    puts "get3DSecure function near end, render starts"
    puts "#############################################"
    render :adsecure,:layout=>:main
  end
因为我忘了加上:

WARN: tilt autoloading 'haml' in a non thread-safe way; explicit require 'haml' suggested.

在我的代码的开头。这可能是你的问题吗

在haml/slim/erb模板中使用puts时请注意,因为haml有自己的puts方法:


因此,由于您使用的是padrino,请将每个put替换为:
logger.debug

我发现render或haml方法不会返回。因此,如果您正在执行您的功能,您应该这样做

require "haml" 

它解决了这个问题。

Haml将在此处生成的HTML不会显示在浏览器中。你说“甚至连一个字节都没有从服务器返回”——你确定吗?如果是这样的话,那么这可能不是Haml的问题。如果在浏览器中查看源代码,是否可以看到HTML。请注意,使用
put
将写入stdout(可能是终端),而不是HTML页面。是的,我确信,不会返回任何内容,只是一个空页面(源代码)。
return haml :problem_haml