<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>eva (evayuhz)</title>
    <link>https://ruby-china.org/eva</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>rubychina 里 markdown 的嵌套列表显示问题</title>
      <description>&lt;p&gt;我用 redcarpet 解析 markdown, 发现嵌套列表到 6 级后显示就不正确了。
如&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* 1a
    * 2b
        * 3c
            * 4d
                * 5e
                    * 6f
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显示为&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1a

&lt;ul&gt;
&lt;li&gt;2b

&lt;ul&gt;
&lt;li&gt;3c

&lt;ul&gt;
&lt;li&gt;4d

&lt;ul&gt;
&lt;li&gt;5e

&lt;ul&gt;
&lt;li&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;第 6 级就没有正常显示出来，发现 rubychina 也有一样的问题，但在 github 上就能正常显示，在&lt;a href="http://johnmacfarlane.net/pandoc/try/" rel="nofollow" target="_blank"&gt;http://johnmacfarlane.net/pandoc/try/&lt;/a&gt; 上也能正常显示，算 redcarpet 的 bug 么？markdown 语法也没有限制说嵌套列表不能超过 6 级吧&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Tue, 25 Feb 2014 17:11:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/17484</link>
      <guid>https://ruby-china.org/topics/17484</guid>
    </item>
    <item>
      <title>AWS CloudFront log 分析及 Zlib 使用问题？</title>
      <description>&lt;p&gt;我目前使用的下载服务是 aws 的 s3 和 cloudfront(英文网站针对国外用户），但 aws 没有提供下载次数的统计。于是我的想法是写个脚本每天去下载前一天的 cloudfront 的 log（使用 gem aws-sdk)，再处理分析得到下载次数。使用 ruby 1.8.7，代码如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'rubygems'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'aws'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'active_support/all'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'zlib'&lt;/span&gt;

&lt;span class="no"&gt;AWS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="ss"&gt;:access_key_id&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'XXXXX'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;:secret_access_key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'XXXXX'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;:region&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"XXX"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;today&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;days&lt;/span&gt;
&lt;span class="n"&gt;date_fmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"%Y-%m-%d"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;s3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;AWS&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;S3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;buckets&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'XXXX-download'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="vi"&gt;@objs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;objects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;with_prefix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'cflog'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=~&lt;/span&gt; &lt;span class="no"&gt;Regexp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;date_fmt&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;

&lt;span class="n"&gt;logs_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"logs/&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;date_fmt&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.gz"&lt;/span&gt;

&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logs_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"wb"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="vi"&gt;@objs.each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
            &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="no"&gt;Zlib&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;GzipReader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logs_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;gz&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;gz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each_line&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/\tGET\t\S+\t\/(\S+)\t200\t\S+\t\S+\t\S+\t\S+\tHit\t/i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;match&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;     
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;cloudfront 的 log 是.gz 格式的，每天大概有好几万条 log，且每条 log 都只有几百个字节，因此我是先将前一天的所有 Log 下载下来合并成一个.gz 文件，再用 Zlib::GzipReader 去分析，如果 log 里是 Get /XXXX.zip 200 .... Hit 这种格式，我会当成是一次下载请求。&lt;/p&gt;

&lt;p&gt;好了，现在的问题是：
1 合并后的.gz log 文件也正常生成了（如 2013-12-08.gz），但最后用 Zlib::GzipReader.open(logs_file) 去处理的时候，发现只读取了部分内容（只有第一个 log 的内容，用 gz.read 看也只有部份内容）。如果直接解压 2013-12-08.gz 文件后可以看到内容是完整的。为什么呢？
2 我这么判断下载次数合理么？因为没有发现 cloudfront 的 log 有关于下载完成的标志。&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Mon, 09 Dec 2013 17:37:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/16095</link>
      <guid>https://ruby-china.org/topics/16095</guid>
    </item>
    <item>
      <title>请问 redcarpet 如何增加 anchor？</title>
      <description>&lt;p&gt;我的代码如下：（环境 ruby 1.8.7 rails 2.3.14）
application_helper.rb:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'redcarpet'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'pygments'&lt;/span&gt;
&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;ApplicationHelper&lt;/span&gt;
  &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HTMLwithPygments&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Redcarpet&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Render&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTML&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;block_code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="no"&gt;Pygments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;highlight&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:lexer&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;markdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;renderer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;HTMLwithPygments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:hard_wrap&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:with_toc_data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="ss"&gt;:autolink&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:no_intra_emphasis&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:fenced_code_blocks&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:lax_html_blocks&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:strikethrough&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:superscript&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="ss"&gt;:lax_spacing&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="no"&gt;Redcarpet&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Markdown&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;html_safe&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt; 
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;view:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= markdown(File.read(@filename)) %&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文件是本地的静态 md 文件：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- [Header Files](#header-files)
...
# Header Files
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是最终生成的 html 如下：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;a href="#header-files"&amp;gt;Header Files&amp;lt;/a&amp;gt;
....
&amp;lt;h1 id="toc_1"&amp;gt;Header Files&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;问题就出在超连接里是#header-files，而 h1 里是 toc_1
请问我的 md 文件里 header-files 后面应该写成 toc_1 才行么？
但这个文件是从 github 下 clone 下来的，我看 github 生成的是：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1&amp;gt;
&amp;lt;a class="anchor" href="#header-files" name="header-files"&amp;gt;
&amp;lt;span class="octicon octicon-link"&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/a&amp;gt;
Header Files
&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个 github 特殊处理了么？还是有什么参数直接加一下就好？&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Fri, 15 Nov 2013 10:21:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/15555</link>
      <guid>https://ruby-china.org/topics/15555</guid>
    </item>
    <item>
      <title>有用过 Amazon AWS S3 或 cloudfront 的么？</title>
      <description>&lt;p&gt;有用过 amazon aws S3 或 cloudfront 的么？
S3 或 cloudfront 能支持查看每个文件的下载次数么？&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Mon, 30 Sep 2013 11:57:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/14486</link>
      <guid>https://ruby-china.org/topics/14486</guid>
    </item>
    <item>
      <title>Rails Asset Pipeline js 无效的问题</title>
      <description>&lt;p&gt;开发环境：rails4 
我写了一个简单的登陆页面，如下：
&lt;img src="//l.ruby-china.com/photo/6d18d1826ecaf3824dbb763455784765.png" title="" alt=""&gt;
我希望每次进入这个页面时，能把焦点聚在 email 输入框里，于是
sessions.js:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ready&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"#session_email"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;application.html.erb:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" =&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="sx"&gt;%&amp;gt;
&amp;lt;%= stylesheet_link_tag params[:controller] %&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= javascript_include_tag "application", "data-turbolinks-track" =&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="sx"&gt;%&amp;gt;
&amp;lt;%= javascript_include_tag params[:controller] %&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= csrf_meta_tags %&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;application.js:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="sr"&gt;//&lt;/span&gt;
&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="n"&gt;jquery&lt;/span&gt;
&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="n"&gt;jquery_ujs&lt;/span&gt;
&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="n"&gt;bootstrap&lt;/span&gt;
&lt;span class="sr"&gt;//&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="n"&gt;turbolinks&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最终生成的登陆页面也包含了 sessions.js
问题是，只有当我在浏览器的 url 里输入 localhost:3000/signin (sessions#new) 时 js 才生效，焦点才会聚焦在 emaill 输入框里，看 log 也会去 started get assets/sessions.js，但如果我通过菜单栏里的链接链过去(&lt;code&gt;&amp;lt;a href="/signin"&amp;gt;登陆&amp;lt;/a&amp;gt;&lt;/code&gt;)，则 js 无效，看 log 里也没有去 get js 文件。为什么呢？&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Tue, 06 Aug 2013 14:14:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/13096</link>
      <guid>https://ruby-china.org/topics/13096</guid>
    </item>
    <item>
      <title>请教 memcached 的问题</title>
      <description>&lt;p&gt;以前没用过memcache，最近想加一下试下，因为目前把news#index作为首页，但news基本上很少更新，有时几天才发一篇，觉得有必要缓存下。
因为news#index页面对用户没有什么不同的地方，所有考虑直接用caches_action.然后在news和comments变化的时候去expire_action.
但有个问题，因为用到了分页，所以加了路由
&lt;code&gt;map.news_with_page '/news/page/:page', :controller =&amp;gt; 'news', :action =&amp;gt; 'index'&lt;/code&gt;
&lt;code&gt;expire_action :controller =&amp;gt; :news, :action =&amp;gt; :index 
&lt;/code&gt;
但如果我修改的是第二页的某篇 news，expire_action 还是只刷新了第一页的缓存。
所以请问我如何能刷新第二页的缓存？或者如何只缓存第一页？&lt;/p&gt;

&lt;p&gt;环境：ruby1.8.7 rails2.3.14&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Fri, 12 Jul 2013 18:12:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/12468</link>
      <guid>https://ruby-china.org/topics/12468</guid>
    </item>
    <item>
      <title>如何让 Session 在 Rails 项目和 PHP 项目间共享？</title>
      <description>&lt;p&gt;同一台服务器上有一个 rails 项目（使用类似 projects.example.com 子域名）和 php 项目（使用 www.example.com 域名），目前用户信息都在 rails 项目里，有没有可能让 session 在这两个项目间共享？如何实现呢？&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Tue, 14 May 2013 18:18:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/10979</link>
      <guid>https://ruby-china.org/topics/10979</guid>
    </item>
    <item>
      <title>ruby-china 404 页面</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/e165a878c30392ba1d6e428f3fd815cf.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;似乎没有这个页面哦！大哥，回去看看别的吧。
忽略我们的存在是么！明显不考虑 &lt;em&gt;妹子们&lt;/em&gt; 的感受啊！摔！&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Thu, 11 Apr 2013 16:35:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/10108</link>
      <guid>https://ruby-china.org/topics/10108</guid>
    </item>
    <item>
      <title>求教一个 ruby/rails 的 self 的问题</title>
      <description>&lt;p&gt;在 railscasts-china 里第二篇讲#002 User Authentication 的时候（&lt;a href="http://railscasts-china.com/episodes/user-authentication?view=comments" rel="nofollow" target="_blank"&gt;http://railscasts-china.com/episodes/user-authentication?view=comments&lt;/a&gt;），user model 的代码如下：
class User &amp;lt; ActiveRecord::Base
  validates :login, :presence =&amp;gt; true&lt;/p&gt;

&lt;p&gt;def password
    &lt;a href="/password" class="user-mention" title="@password"&gt;&lt;i&gt;@&lt;/i&gt;password&lt;/a&gt;
  end&lt;/p&gt;

&lt;p&gt;def password=(pass)
    return unless pass
    &lt;a href="/password" class="user-mention" title="@password"&gt;&lt;i&gt;@&lt;/i&gt;password&lt;/a&gt; = pass
    generate_password(pass)
  end&lt;/p&gt;

&lt;p&gt;# 此处用动词形式 (authenticate) 更加合适，特此说明一下。感谢 Chen Kai 同学的提醒.
  def self.authentication(login, password)
    user = User.find_by_login(login)
    if user &amp;amp;&amp;amp; Digest::SHA256.hexdigest(password + user.salt) == user.hashed_password
      return user
    end
    false
  end&lt;/p&gt;

&lt;p&gt;private
  def generate_password(pass)
    salt = Array.new(10){rand(1024).to_s(36)}.join
    self.salt, self.hashed_password = 
      salt, Digest::SHA256.hexdigest(pass + salt)
  end
end&lt;/p&gt;

&lt;p&gt;想问下在 generate_password 方法里，self.salt = salt，这里一定要用 self.salt 才行吗？为什么不能直接用＠salt = salt？&lt;/p&gt;</description>
      <author>eva</author>
      <pubDate>Wed, 06 Mar 2013 11:22:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/9174</link>
      <guid>https://ruby-china.org/topics/9174</guid>
    </item>
  </channel>
</rss>
