<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>sailorhero (高飞)</title>
    <link>https://ruby-china.org/sailorhero</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>GitLab 配置通过 smtp.163.com 发送邮件</title>
      <description>&lt;p&gt;配置 SMTP 发送邮件配置，使用 163 邮箱。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vi /etc/gitlab/gitlab.rb                            
&lt;span class="c"&gt;# Change the external_url to the address your users will type in their browser&lt;/span&gt;
external_url &lt;span class="s1"&gt;'http://xxhost.com'&lt;/span&gt;

&lt;span class="c"&gt;#Sending application email via SMTP&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_enable'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true
&lt;/span&gt;gitlab_rails[&lt;span class="s1"&gt;'smtp_address'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"smtp.163.com"&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_port'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 25 
gitlab_rails[&lt;span class="s1"&gt;'smtp_user_name'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"xxuser@163.com"&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_password'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"xxpassword"&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_domain'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"163.com"&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_authentication'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; :login
gitlab_rails[&lt;span class="s1"&gt;'smtp_enable_starttls_auto'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;发送不成功，·sudo gitlab-ctl tail`检查日志报错如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11_16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;08.43945&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="no"&gt;T16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="no"&gt;Z&lt;/span&gt; &lt;span class="mi"&gt;12595&lt;/span&gt; &lt;span class="no"&gt;TID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dxf7c&lt;/span&gt; &lt;span class="no"&gt;Sidekiq&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Extensions&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;DelayedMailer&lt;/span&gt; &lt;span class="no"&gt;JID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;061604&lt;/span&gt;&lt;span class="n"&gt;dc558ce8560b273cbe&lt;/span&gt; &lt;span class="no"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="ss"&gt;fail: &lt;/span&gt;&lt;span class="mf"&gt;0.574&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;
&lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11_16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;08.44955&lt;/span&gt; &lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="no"&gt;T16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="no"&gt;Z&lt;/span&gt; &lt;span class="mi"&gt;12595&lt;/span&gt; &lt;span class="no"&gt;TID&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dxf7c&lt;/span&gt; &lt;span class="no"&gt;WARN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"retry"&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="s2"&gt;"queue"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"class"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"Sidekiq::Extensions::DelayedMailer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"args"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"---&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- !ruby/class 'Notify'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- :project_access_granted_email&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- - 4&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s2"&gt;"jid"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"061604dc558ce8560b273cbe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"enqueued_at"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mf"&gt;1405094359.354158&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"error_message"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"553 Mail from must equal authorized user&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"error_class"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"Net::SMTPFatalError"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"failed_at"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"2014-07-11 15:59:28 UTC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"retry_count"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"retried_at"&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mo"&gt;07&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt; &lt;span class="no"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Google 大法后，错误码对应解释&lt;a href="http://www.mail163.cn/fault/analysis/1109.html" rel="nofollow" target="_blank" title=""&gt;网易服务器 smtp 机器要求身份验证帐号和发信帐号必须一致，如果用户在发送邮件时，身份验证帐号和发件人帐号是不同的，因此拒绝发送。&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;修改 gitlab.rb，修改发信人和身份验证帐号一致，163 发信 OK。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;vi /etc/gitlab/gitlab.rb                            
&lt;span class="c"&gt;# Change the external_url to the address your users will type in their browser&lt;/span&gt;
external_url &lt;span class="s1"&gt;'http://xxhost.com'&lt;/span&gt;

&lt;span class="c"&gt;#Sending application email via SMTP&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_enable'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true
&lt;/span&gt;gitlab_rails[&lt;span class="s1"&gt;'smtp_address'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"smtp.163.com"&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_port'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 25 
gitlab_rails[&lt;span class="s1"&gt;'smtp_user_name'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"xxuser@163.com"&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_password'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"xxpassword"&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_domain'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"163.com"&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'smtp_authentication'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; :login
gitlab_rails[&lt;span class="s1"&gt;'smtp_enable_starttls_auto'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="c"&gt;##修改gitlab配置的发信人&lt;/span&gt;
gitlab_rails[&lt;span class="s1"&gt;'gitlab_email_from'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"xxuser@163.com"&lt;/span&gt;
user[&lt;span class="s2"&gt;"git_user_email"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"xxuser@163.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>sailorhero</author>
      <pubDate>Sat, 12 Jul 2014 00:40:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/20450</link>
      <guid>https://ruby-china.org/topics/20450</guid>
    </item>
    <item>
      <title>git-flow 大家在用吗，看介绍不错，准备试用....</title>
      <description>&lt;p&gt;参考文档&lt;/p&gt;

&lt;p&gt;Git-flow 使用笔记 &lt;a href="http://fann.im/blog/2012/03/12/git-flow-notes/" rel="nofollow" target="_blank"&gt;http://fann.im/blog/2012/03/12/git-flow-notes/&lt;/a&gt;
Windows 环境下 msysgit 下安装 gitflow 步骤 &lt;a href="http://blog.csdn.net/ccf0703/article/details/7603603" rel="nofollow" target="_blank"&gt;http://blog.csdn.net/ccf0703/article/details/7603603&lt;/a&gt;&lt;/p&gt;</description>
      <author>sailorhero</author>
      <pubDate>Wed, 10 Apr 2013 23:46:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/10079</link>
      <guid>https://ruby-china.org/topics/10079</guid>
    </item>
    <item>
      <title>Wiki 里面能否加入 Vagrant 的章节？</title>
      <description>&lt;p&gt;Wiki 里面能否加入 Vagrant 的章节？&lt;/p&gt;</description>
      <author>sailorhero</author>
      <pubDate>Tue, 09 Apr 2013 23:44:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/10055</link>
      <guid>https://ruby-china.org/topics/10055</guid>
    </item>
    <item>
      <title>git alias 问题，关于 git log --graph 格式化</title>
      <description>&lt;p&gt;Window XP 系统下，执行命令行：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;  &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;abbrev&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;relative&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;pretty&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="ss"&gt;:"%Cred%h%Creset -%C(yello
w)%d%Creset %s %Cgreen(%Cblue%an%Creset%Cgreen %cr)%Creset "&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出如下：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;WARNING&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;terminal&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;fully&lt;/span&gt; &lt;span class="n"&gt;functional&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="n"&gt;c95e6&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;HEAD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;base_project_with_guard_and_spork&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;origin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;master&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="n"&gt;b84cd0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="no"&gt;Guard_spork&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="no"&gt;Guard&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="nb"&gt;load&lt;/span&gt; &lt;span class="n"&gt;spork&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorhero&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;2e33813&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="n"&gt;spork&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;fast&lt;/span&gt; &lt;span class="n"&gt;testing&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorhero&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;de3a63&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="no"&gt;Guard&lt;/span&gt; &lt;span class="n"&gt;support&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="no"&gt;AutoTesting&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorhero&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;d364ad&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;static&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;improve&lt;/span&gt; &lt;span class="n"&gt;static_pages_spec&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rb&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorher&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;ea1787b&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="no"&gt;Finish&lt;/span&gt; &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;pages&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorhero&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;485&lt;/span&gt;&lt;span class="n"&gt;c8c6&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="no"&gt;Add&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="no"&gt;StaticPages&lt;/span&gt; &lt;span class="n"&gt;controller&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorhero&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;d569e42&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="no"&gt;Rails工程生成&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;添加Rspec支持&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorhero&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;df5b15b&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;添加ignore定义&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;刷新README说明&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorhero&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="n"&gt;b2a9&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="n"&gt;commit&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="no"&gt;README&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;md&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sailorhero&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;ago&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但配置 alias 到$home/.gitconfig 中&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;alias&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;co&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;checkout&lt;/span&gt;
&lt;span class="n"&gt;br&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;branch&lt;/span&gt;
&lt;span class="n"&gt;ci&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;commit&lt;/span&gt;
&lt;span class="n"&gt;st&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;
&lt;span class="n"&gt;last&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;pretty&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;oneline&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="no"&gt;HEAD&lt;/span&gt;
&lt;span class="n"&gt;glog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;log&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;  &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;abbrev&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;commit&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;relative&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;pretty&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="ss"&gt;:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%Cblue%an%Creset%Cgreen %cr)%Creset "&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行，命令行执行&lt;code&gt;git glog&lt;/code&gt;，报如下错误&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="ss"&gt;fatal: &lt;/span&gt;&lt;span class="n"&gt;ambiguous&lt;/span&gt; &lt;span class="n"&gt;argument&lt;/span&gt; &lt;span class="s1"&gt;'%s'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unknown&lt;/span&gt; &lt;span class="n"&gt;revision&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;working&lt;/span&gt; &lt;span class="n"&gt;tree&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="no"&gt;Use&lt;/span&gt; &lt;span class="s1"&gt;'--'&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;separate&lt;/span&gt; &lt;span class="n"&gt;paths&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;revisions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;like&lt;/span&gt; &lt;span class="ss"&gt;this:
&lt;/span&gt;&lt;span class="s1"&gt;'git &amp;lt;command&amp;gt; [&amp;lt;revision&amp;gt;...] -- [&amp;lt;file&amp;gt;...]'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;求解....&lt;/p&gt;</description>
      <author>sailorhero</author>
      <pubDate>Tue, 05 Mar 2013 21:42:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/9158</link>
      <guid>https://ruby-china.org/topics/9158</guid>
    </item>
    <item>
      <title>Windows 下 Ruby 2.0 下，SQLite 3 的 gem 加载失败。</title>
      <description>&lt;p&gt;Windows 下 Ruby2.0 安装 Sqlite3 的 gem 包，使用 Devkit 编译 Native 通过，但启动 &lt;code&gt;rails console&lt;/code&gt;或 &lt;code&gt;rails server&lt;/code&gt;时出错，找不到 native_sqlite&lt;/p&gt;

&lt;p&gt;退回 Ruby1.9.3，编译 Native 没有问题;检查了下 1.9.3 下编译通过的 sqlite 包，sqlite3-1.3.7-x86-mingw32 的&lt;code&gt;\lib\sqlite3&lt;/code&gt;目录下，有针对 1.8 和 1.9 的目录，目录下是“sqlite3_native.so”；对照检查 Ruby2 下的 sqlite 对应目录结构，下面也只有 1.8/1.9 的目录；&lt;/p&gt;

&lt;p&gt;推断，应该是 sqlite3 目前只支持 Ruby1.9，还未支持 Ruby2.0。待确认.....&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7-x86-mingw32/lib/sqlite3.r
b:6:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7-x86-mingw32/
lib/sqlite3.rb:6:in `rescue in &amp;lt;top (required)&amp;gt;'
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7-x86-mingw32/
lib/sqlite3.rb:2:in `&amp;lt;top (required)&amp;gt;'
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/bundler-1.3.0/lib/bundler/
runtime.rb:72:in `require'
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/bundler-1.3.0/lib/bundler/
runtime.rb:72:in `block (2 levels) in require'
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/bundler-1.3.0/lib/bundler/
runtime.rb:70:in `each'
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/bundler-1.3.0/lib/bundler/
runtime.rb:70:in `block in require'
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/bundler-1.3.0/lib/bundler/
runtime.rb:59:in `each'
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/bundler-1.3.0/lib/bundler/
runtime.rb:59:in `require'
        from D:/ruby/Ruby200/lib/ruby/gems/2.0.0/gems/bundler-1.3.0/lib/bundler.
rb:132:in `require'  
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>sailorhero</author>
      <pubDate>Sat, 02 Mar 2013 15:44:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/9068</link>
      <guid>https://ruby-china.org/topics/9068</guid>
    </item>
    <item>
      <title>国外.edu 邮箱,免费.edu 教育邮箱申请 (新)[转贴]</title>
      <description>&lt;p&gt;&lt;a href="http://www.ziliaoboke.com/free-edu-mai.html" rel="nofollow" target="_blank"&gt;http://www.ziliaoboke.com/free-edu-mai.html&lt;/a&gt;&lt;/p&gt;</description>
      <author>sailorhero</author>
      <pubDate>Thu, 21 Feb 2013 21:44:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/8838</link>
      <guid>https://ruby-china.org/topics/8838</guid>
    </item>
    <item>
      <title>Balloons.IO 在国内如何使用啊！twitter 和 facebook 都被封啦</title>
      <description>&lt;p&gt;想架设一台 Balloons.IO&lt;/p&gt;

&lt;p&gt;Balloons.IO 只支持 Twitter 和 Facebook 登录&lt;/p&gt;

&lt;p&gt;哪位熟悉 Node.js，帮忙看看如何实现本地用户管理，或者 Github 登录，如果能实现类似 omniauth-identity。&lt;/p&gt;</description>
      <author>sailorhero</author>
      <pubDate>Thu, 07 Feb 2013 03:06:49 +0800</pubDate>
      <link>https://ruby-china.org/topics/8636</link>
      <guid>https://ruby-china.org/topics/8636</guid>
    </item>
    <item>
      <title>Redmine 数据迁移记录</title>
      <description>&lt;p&gt;下午将 Redmine 迁移到另一台主机，记录一下&lt;/p&gt;
&lt;h2 id="Redmine数据库数据迁移"&gt;Redmine 数据库数据迁移&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;先说一下备份还原 mysql 数据库的命令
备份 
    mysqldump -hhostname -uusername -ppassword databasename &amp;gt; backupfile.sql
还原
    mysql -hhostname -uusername -ppassword databasename &amp;lt; backupfile.sql
-h 后是主机名，可以省略不写 -u 后是用户名 -p 后是密码 databasename 是数据库名
需切换到 mysql 安装程序的路径下执行，如环境变量有问题，可在执行前，备份还原前，执行 Redmine 的 setenv.sh(在 Redmine 安装路径的 scripts 目录中)
数据库名和数据库访问用户名口令，可在 Redmine 安装配置文件 database.yml 中获取：redmine 安装路径/apps/redmine/htdocs/config&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;production:
     adapter: mysql2
     database: bitnami_redmine
     host: localhost
     socket: /opt/bitnami/mysql/tmp/mysql.sock
     port: 3306
     username: xxx
     password: "xxx" 
     encoding: utf8&lt;/p&gt;
&lt;h2 id="Redmine文件附件迁移"&gt;Redmine 文件附件迁移&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;将原 Redmine 安装环境下，文件附件保存目录：redmine 安装路径/apps/redmine/htdocs/files 下的所有文件打包；在新 Redmine 环境中，解压拷贝到相同目录中&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="Redmine插件迁移"&gt;Redmine 插件迁移&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;将原 Redmine 安装环境下，插件目录：redmine 安装路径/apps/redmine/htdocs/plugins 下的所有文件打包；在新 Redmine 环境中，解压拷贝到相同目录中
修改 redmine 安装路径/apps/redmine/redmineini.sh 脚本，创建迁移初始化脚本&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;cp redmineini.sh redmine.qianyi.sh&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;编辑 redmine.qianyi.sh 脚本&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;#!/bin/sh
    . /home/bitnami/redmine-2.2.2-0/scripts/setenv.sh
    cd /home/bitnami/redmine-2.2.2-0/apps/redmine/htdocs
    bundle install --local --without development test postgresql sqlite --binstubs
    #新增脚本############################################################
    rake generate_secret_token&lt;br&gt;
    rake db:migrate RAILS_ENV="production" 
    rake redmine:plugins:migrate RAILS_ENV=production
    rake tmp:cache:clear
    rake tmp:sessions:clear
    #############################################################
    echo zh | rake redmine:load_default_data RAILS_ENV="production"&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;搞定，重启 Redmine 服务，收工。&lt;/p&gt;

&lt;p&gt;以上为实际操作过程，不出意外，都可以成功的！&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <author>sailorhero</author>
      <pubDate>Thu, 24 Jan 2013 21:18:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/8340</link>
      <guid>https://ruby-china.org/topics/8340</guid>
    </item>
  </channel>
</rss>
