<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>liguangsong (李广松)</title>
    <link>https://ruby-china.org/liguangsong</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>用 Jenkins 做的服务器工程的构建，构建中权限问题怎么解决</title>
      <description>&lt;p&gt;用 jenkins 做的服务器工程的构建
在构建时加上了一个 execute shell 步骤其中执行&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bundle install 
bundle exec rake assets:precompile RAILS_ENV=production
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;构建中发生错误&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rake aborted!
Errno::EACCES: Permission denied - /var/lib/jenkins/workspace/bookkeeper_map/tmp/cache/assets/production/sprockets/v3.0/WScdt_VRi73A4j9G5G1M-1gORwVn1JYvfmJNvcPYCTE.cache
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是哪里的问题&lt;/p&gt;</description>
      <author>liguangsong</author>
      <pubDate>Tue, 19 Jan 2016 14:07:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/28780</link>
      <guid>https://ruby-china.org/topics/28780</guid>
    </item>
    <item>
      <title>gem “weixin_authorize” 出现错误{"errcode":45009,"errmsg":"api freq out of limit"}</title>
      <description>&lt;p&gt;现在网站的人上去了，出现请求 access_token 超过最大值，我用的是 weixin_authorize，我的代码如下：
麻烦大神们看看，是哪里出错造成了，请求超出最大值&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WeixinAuthorize.configure do |config|
  config.rest_client_options = {timeout: 50, open_timeout: 50, verify_ssl: true}
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的 timeout 和 open_timeout 不知道是怎么使用的，没有查到说明&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module WeiXin
  def self.client
    $client = WeixinAuthorize::Client.new(APP_ID, APP_SECRET)
  end
end
&lt;/code&gt;&lt;/pre&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require './app/service/weixin/js_sdk'
  def get_ticket
   if !$client || !$client.is_valid?
     $client = WeiXin.client()
   end
   # $client = WeiXin.client()
   sign_package = $client.get_jssign_package(params[:url])
   render :json =&amp;gt; {:sign_package =&amp;gt; sign_package}
 end
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>liguangsong</author>
      <pubDate>Tue, 08 Dec 2015 16:27:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/28312</link>
      <guid>https://ruby-china.org/topics/28312</guid>
    </item>
    <item>
      <title>数据怎么查询才能优化查询速度</title>
      <description>&lt;p&gt;我现在有一个用户表里面有个学历这个属性，然后我有一个文章表，use：has_many: articles 我应该怎么去实现查找全部发布者学历大于本科的文章
我现在是这么做的&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Article.where(opend_id: user.where('大于本科').pluck(article_id:)).order("updated_at desc").paginate(:page =&amp;gt; params[:page], :per_page =&amp;gt; 8)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是感觉如果数据多了，感觉这个过程会很浪费时间不知道怎么做才好&lt;/p&gt;</description>
      <author>liguangsong</author>
      <pubDate>Tue, 17 Nov 2015 23:26:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/28093</link>
      <guid>https://ruby-china.org/topics/28093</guid>
    </item>
    <item>
      <title>rails 里怎么实现轮询</title>
      <description>&lt;p&gt;想在 ruby 里实现以下功能，每隔 10 分钟向里另一个服务器发送请求，请求数据，应该怎么实现&lt;/p&gt;</description>
      <author>liguangsong</author>
      <pubDate>Mon, 19 Oct 2015 10:47:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/27718</link>
      <guid>https://ruby-china.org/topics/27718</guid>
    </item>
    <item>
      <title>form_tag 提交时报错 Can't verify CSRF token authenticity 怎么解决</title>
      <description>&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Parameters: {"utf8"=&amp;gt;"✓", "authenticity_token"=&amp;gt;"URxRok8OUG3ldCKKzVWeWgF4kZ+ba5z6fLfI/VLPydJNvdv63FMB8/sEA2wg1xFGsbp44HcKrKNxPQEd0ciIVQ==", "name"=&amp;gt;"1", "password"=&amp;gt;"[FILTERED]", "commit"=&amp;gt;"登录"}
Can't verify CSRF token authenticity
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以前都是 skip_before_filter :verify_authenticity_token 跳过验证，但是不知道原理，感觉会不会不安全
谁能给点建议&lt;/p&gt;</description>
      <author>liguangsong</author>
      <pubDate>Thu, 24 Sep 2015 16:41:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/27464</link>
      <guid>https://ruby-china.org/topics/27464</guid>
    </item>
    <item>
      <title>部署到服务器 asset 里的 css 和 js 时不时加载不上，内存不足么？</title>
      <description>&lt;p&gt;部署到服务器上后，一开始还能加载的上，过段时间就加载不上了，然后不用管一会有恢复正常了，这是哪里的问题，和缓存或者内存有关系么&lt;/p&gt;</description>
      <author>liguangsong</author>
      <pubDate>Mon, 31 Aug 2015 08:37:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/27124</link>
      <guid>https://ruby-china.org/topics/27124</guid>
    </item>
    <item>
      <title> crontab 没有执行 rackup 的权限？</title>
      <description>&lt;p&gt;这两天做一个聊天服务器，好不容易放到服务器上了，但是我是这么启动的&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rackup faye.ru -s thin -E production -o 0.0.0.0 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;怕他自己挂掉，让 crontab 轮询去，执行文件&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;faye.sh
#!/bin/sh
echo "ddssf" &amp;gt;&amp;gt; /var/ssss.tx
DTTERM=$(ps -ef|grep thin | grep -v "grep :9292"|wc -l)
if [ $DTTERM = 2 ]; then
cd /var/www/html/jenkins/xxxx/xxxxx;
rackup faye.ru -s thin -E production -o 0.0.0.0 &amp;amp;
echo "ok" &amp;gt;&amp;gt; /var/ssss.tx
fi
```
结果文件执行没问题，但是服务就是起不来
手动执行 ,就启动了
```
sh faye.sh
```
亲们，这是怎么回事？权限问题？

cron.log写着

Aug 28 14:07:01 iZ28tq0g0rnZ CRON[20947]: (root) CMD (bash /etc/faye_client.sh) 


&lt;/code&gt;&lt;/pre&gt;</description>
      <author>liguangsong</author>
      <pubDate>Fri, 28 Aug 2015 14:18:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/27108</link>
      <guid>https://ruby-china.org/topics/27108</guid>
    </item>
    <item>
      <title>Faye 部署到服务器上前台握手失败</title>
      <description>&lt;p&gt;启动 faye.ru rackup faye.ru -s thin -E production&lt;/p&gt;

&lt;p&gt;本地测试挺好的，
但是部署到服务就完蛋了&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WebSocket connection to 'ws://blind.codefordream.com:9292/faye' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是 faye.ru 代码 &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;'faye'&lt;/span&gt;
&lt;span class="nb"&gt;require&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;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'../config/initializers/faye_token.rb'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'active_record'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'mysql2'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'yaml'&lt;/span&gt;
&lt;span class="no"&gt;Faye&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load_adapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'thin'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="no"&gt;RAILS_ENV&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'RACK_ENV'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;# require File.expand_path('../app/models/user_chat_room.rb', __FILE__)&lt;/span&gt;
&lt;span class="nb"&gt;require&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;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'../app/models/user_chat_list.rb'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;require&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;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'../app/models/chat_message.rb'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;require&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;expand_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'../app/models/user_chat_online.rb'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'RACK_ENV'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;'production'&lt;/span&gt;
&lt;span class="n"&gt;dbconfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;YAML&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&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;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'config/database.yml'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;establish_connection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dbconfig&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;faye_server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Faye&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;RackAdapter&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;:mount&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'/faye'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:timeout&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MarkOnline&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;incoming&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;faye_client&lt;/span&gt; &lt;span class="o"&gt;||=&lt;/span&gt; &lt;span class="no"&gt;Faye&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Client&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="s1"&gt;'http://localhost:9292/faye'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'channel'&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="s1"&gt;'/chat/*'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;to_is_online&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;UserChatOnline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check_on_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'to'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'from'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'content'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'clientId'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;to_is_online&lt;/span&gt;
        &lt;span class="no"&gt;UserChatList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;change_chat_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'to'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'from'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s2"&gt;"false"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="no"&gt;ChatMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;creat_new_chat_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'from'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'to'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;'content'&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;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'channel'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'/meta/subscribe'&lt;/span&gt;
      &lt;span class="no"&gt;UserChatOnline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_on_line_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'data'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'clientId'&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;if&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'channel'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'/meta/disconnect'&lt;/span&gt;
      &lt;span class="no"&gt;UserChatOnline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove_on_line_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'clientId'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;

    &lt;span class="n"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&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="n"&gt;faye_server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:disconnect&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;client_id&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="no"&gt;UserChatOnline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove_on_line_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;


&lt;span class="n"&gt;faye_server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_extension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;MarkOnline&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;run&lt;/span&gt; &lt;span class="n"&gt;faye_server&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是前台配置&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Faye&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;:9292&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/faye&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/chat/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;user_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;get_message_from_server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;show_from_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;from&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addExtension&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;outgoing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/meta/subscribe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user_name&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/meta/disconnect&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user_name&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>liguangsong</author>
      <pubDate>Wed, 26 Aug 2015 10:27:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/27084</link>
      <guid>https://ruby-china.org/topics/27084</guid>
    </item>
    <item>
      <title> 求助 ，上传照片出现 RequestURITooLarge 错误</title>
      <description>&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function save_notes(image){
    $.ajax({
        url:"/save_notes",
        data:{
            image:image,
            text:localStorage.getItem("post_text")||""
        },
        success:function(){

        },
        error:function(){

        }
    })
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本地测试出现&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ERROR WEBrick::HTTPStatus::RequestURITooLarge 
ERROR TypeError: can't convert nil into an exact number
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;感觉应该设定允许上传的文件最大范围，但不知道怎么实现&lt;/p&gt;</description>
      <author>liguangsong</author>
      <pubDate>Mon, 17 Aug 2015 16:30:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/26957</link>
      <guid>https://ruby-china.org/topics/26957</guid>
    </item>
    <item>
      <title>如何加快首页加载？求助</title>
      <description>&lt;p&gt;bundle exec rake assets:precompile 编译后的 application 有 300k(就只有 bootstrap、jquery、kindeditor) 加载的时间有两秒，再上图片的渲染感觉网页加载特别慢，求大神们指点下，我在 nginx 是这样设置的&lt;/p&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;http&lt;/span&gt; {
     &lt;span class="n"&gt;passenger_root&lt;/span&gt; /&lt;span class="n"&gt;usr&lt;/span&gt;/&lt;span class="n"&gt;local&lt;/span&gt;/&lt;span class="n"&gt;rvm&lt;/span&gt;/&lt;span class="n"&gt;gems&lt;/span&gt;/&lt;span class="n"&gt;ruby&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="n"&gt;p598&lt;/span&gt;/&lt;span class="n"&gt;gems&lt;/span&gt;/&lt;span class="n"&gt;passenger&lt;/span&gt;-&lt;span class="m"&gt;4&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;59&lt;/span&gt;;
    &lt;span class="n"&gt;passenger_ruby&lt;/span&gt; /&lt;span class="n"&gt;usr&lt;/span&gt;/&lt;span class="n"&gt;local&lt;/span&gt;/&lt;span class="n"&gt;rvm&lt;/span&gt;/&lt;span class="n"&gt;gems&lt;/span&gt;/&lt;span class="n"&gt;ruby&lt;/span&gt;-&lt;span class="m"&gt;2&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="m"&gt;0&lt;/span&gt;-&lt;span class="n"&gt;p598&lt;/span&gt;/&lt;span class="n"&gt;wrappers&lt;/span&gt;/&lt;span class="n"&gt;ruby&lt;/span&gt;;
    &lt;span class="n"&gt;passenger_nodejs&lt;/span&gt; /&lt;span class="n"&gt;root&lt;/span&gt;/.&lt;span class="n"&gt;nvm&lt;/span&gt;/&lt;span class="n"&gt;v0&lt;/span&gt;.&lt;span class="m"&gt;10&lt;/span&gt;.&lt;span class="m"&gt;36&lt;/span&gt;/&lt;span class="n"&gt;bin&lt;/span&gt;/&lt;span class="n"&gt;node&lt;/span&gt;;
    &lt;span class="n"&gt;include&lt;/span&gt;       &lt;span class="n"&gt;mime&lt;/span&gt;.&lt;span class="n"&gt;types&lt;/span&gt;;
    &lt;span class="n"&gt;default_type&lt;/span&gt;  &lt;span class="n"&gt;application&lt;/span&gt;/&lt;span class="n"&gt;octet&lt;/span&gt;-&lt;span class="n"&gt;stream&lt;/span&gt;;



    &lt;span class="n"&gt;sendfile&lt;/span&gt;        &lt;span class="n"&gt;on&lt;/span&gt;;

    &lt;span class="n"&gt;keepalive_timeout&lt;/span&gt;  &lt;span class="m"&gt;65&lt;/span&gt;;

    &lt;span class="n"&gt;gzip&lt;/span&gt;  &lt;span class="n"&gt;on&lt;/span&gt;;
    &lt;span class="n"&gt;gzip_min_length&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;;
    &lt;span class="n"&gt;gzip_buffers&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;;
    &lt;span class="n"&gt;gzip_comp_level&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;;
    &lt;span class="n"&gt;gzip_types&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;/&lt;span class="n"&gt;plain&lt;/span&gt; &lt;span class="n"&gt;application&lt;/span&gt;/&lt;span class="n"&gt;x&lt;/span&gt;-&lt;span class="n"&gt;javascript&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;/&lt;span class="n"&gt;css&lt;/span&gt; &lt;span class="n"&gt;application&lt;/span&gt;/&lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;/&lt;span class="n"&gt;javascript&lt;/span&gt; &lt;span class="n"&gt;application&lt;/span&gt;/&lt;span class="n"&gt;x&lt;/span&gt;-&lt;span class="n"&gt;httpd&lt;/span&gt;-&lt;span class="n"&gt;php&lt;/span&gt;;
}

&lt;span class="n"&gt;server&lt;/span&gt; {
        &lt;span class="n"&gt;listen&lt;/span&gt;       &lt;span class="m"&gt;90&lt;/span&gt;;
        &lt;span class="n"&gt;server_name&lt;/span&gt;  &lt;span class="n"&gt;www&lt;/span&gt;.&lt;span class="n"&gt;xxxx&lt;/span&gt;.&lt;span class="n"&gt;cn&lt;/span&gt;;


    &lt;span class="n"&gt;root&lt;/span&gt; /&lt;span class="n"&gt;var&lt;/span&gt;/&lt;span class="n"&gt;lib&lt;/span&gt;/&lt;span class="n"&gt;jenkins&lt;/span&gt;/&lt;span class="n"&gt;workspace&lt;/span&gt;/&lt;span class="n"&gt;xxxx&lt;/span&gt;/&lt;span class="n"&gt;public&lt;/span&gt;;
        &lt;span class="n"&gt;passenger_enabled&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt;;
    &lt;span class="n"&gt;location&lt;/span&gt; ~* \.(&lt;span class="n"&gt;js&lt;/span&gt;|&lt;span class="n"&gt;css&lt;/span&gt;)$ {
        &lt;span class="n"&gt;expires&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;;
    }
    &lt;span class="n"&gt;location&lt;/span&gt; ~* \.(&lt;span class="n"&gt;jpg&lt;/span&gt;|&lt;span class="n"&gt;png&lt;/span&gt;|&lt;span class="n"&gt;jpeg&lt;/span&gt;|&lt;span class="n"&gt;gif&lt;/span&gt;){
        &lt;span class="n"&gt;expries&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;;
    }
    &lt;span class="n"&gt;location&lt;/span&gt; ^~ /&lt;span class="n"&gt;assets&lt;/span&gt;/ {
        &lt;span class="n"&gt;expries&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;;
    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我应该怎么优化下才好&lt;/p&gt;</description>
      <author>liguangsong</author>
      <pubDate>Mon, 27 Jul 2015 17:18:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/26662</link>
      <guid>https://ruby-china.org/topics/26662</guid>
    </item>
  </channel>
</rss>
