如何在Rails中编写channel.html文件(适用于Facebook)

che*_*ell 8 facebook ruby-on-rails

根据FB SDK,我必须包含一个带有相应标题的通道文件.

作为一个主要的NOOB和Rails而不是PHP开发人员我不知道如何做到这一点.

以下是他们为php提供的示例:

 <?php
 $cache_expire = 60*60*24*365;
 header("Pragma: public");
 header("Cache-Control: max-age=".$cache_expire);
 header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
 ?>
 <script src="//connect.facebook.net/en_US/all.js"></script>
Run Code Online (Sandbox Code Playgroud)

我想知道如何在Rails 3中做同样的事情

小智 16

我厌倦了routes.rb在每个Facebook连接的应用程序中污染我的文件,所以我包装了一个机架处理程序,在Rails引擎中提供正确的channel.html响应并将其作为gem发布.您只需在Gemfile中包含'fb-channel-file'gem,它将自动挂载在/channel.html https://github.com/peterlind/fb-channel-file


sin*_*spi 8

在您的控制器内:

cache_expire = 1.year
response.headers["Pragma"] = "public"
response.headers["Cache-Control"] = "max-age=#{cache_expire.to_i}"
response.headers["Expires"] = (Time.now + cache_expire).strftime("%d %m %Y %H:%I:%S %Z")
render :layout => false, :inline => "<script src='//connect.facebook.net/en_US/all.js'></script>"
Run Code Online (Sandbox Code Playgroud)


Lar*_*y K 3

使用response.headers控制器中的哈希值。文档

你的例子中的例子

cache_expire = 60*60*24*365
response.headers["Pragma"] = "public"
response.headers["Cache-Control"] = "max-age=#{cache_expire}"
response.headers["Expires"] = ... # I'll leave this one to you.
                                  # (Or ask another Q.) 
               # gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
Run Code Online (Sandbox Code Playgroud)