<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>codemonkey (码农与厨子)</title>
    <link>https://ruby-china.org/codemonkey</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>[已解决] 在 Heroku 中部署 Rails，修改 Node 版本问题</title>
      <description>&lt;p&gt;我在 js 中使用了 es6 语法，例如 let 声明变量，但是默认 heroku 部署安装的是 node 的 v6，导致失败，于是我把 let 改成了 var 部署成功&lt;/p&gt;

&lt;p&gt;问题来了，我想修改部署时安装 node 版本，我查了文档，
&lt;a href="https://devcenter.heroku.com/articles/ruby-support#installed-binaries" rel="nofollow" target="_blank"&gt;https://devcenter.heroku.com/articles/ruby-support#installed-binaries&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;原文
Once you have done this you’ll need a package.json file in the root of your app. For example to install version 6.2.2 your package.json could look like this:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ "engines" : { "node": "6.2.2" } }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Commit to git:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git add pacakage.json

$ git commit -m 'specify node version'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now the next time you deploy your Ruby application will use Node version 6.2.2.&lt;/p&gt;

&lt;p&gt;但是，我改成了如下&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "shopa",
  "private": true,
  "dependencies": {},
  "engines": {
    "node": "8.5.0"
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;部署的时候还是安装的 v6 不是我指定的 v8，我是免费的 heroku 用户，哪位朋友知道如何解决，我 google 了。没有找到解决办法，&lt;/p&gt;

&lt;p&gt;--------------------------------分割线－－－－－－－－－－－－&lt;/p&gt;

&lt;p&gt;解决办法就是要添加一个 nodejs 的 buildpack 操作如下：&lt;/p&gt;

&lt;p&gt;1 如果你已经添加了 heroku/ruby，那么需要使用下面&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku buildpacks:add --index 1 heroku/nodejs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2   然后在你的 package.json 里修改依赖版本&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "shopa",
  "private": true,
  "dependencies": {},
  "engines": {
    "node": "8.5.0"
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以在有了 heroku/ruby 时，使用 --index 1 添加 nodejs buildpack，确保在 ruby 构建前，部署 nodejs，&lt;/p&gt;

&lt;p&gt;2 如果你你添加 heroku/nodejs 忘记使用 --index 1
可以使用 下面命令移除 heroku/ruby 一次，再添加&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku buildpacks:remove heroku/ruby 
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>codemonkey</author>
      <pubDate>Fri, 22 Sep 2017 14:18:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/34225</link>
      <guid>https://ruby-china.org/topics/34225</guid>
    </item>
    <item>
      <title>[已解决] 读 Carrierwave 源码疑问</title>
      <description>&lt;p&gt;carrierwave 这个库用来处理接收数据，我的疑问是下面&lt;/p&gt;

&lt;p&gt;1 这个库是不是基于 rails 的。就是 rails 实际上接收完文件，carrierwave 然后再处理这个文件&lt;/p&gt;

&lt;p&gt;2 如果不是我上面说的，那么 carrierwave 是怎么处理传来的二进制数据，例如上传文件，应该是文件，变成字节流，接收之后再存储在磁盘上，它的代码在哪里。我没找到&lt;/p&gt;</description>
      <author>codemonkey</author>
      <pubDate>Sat, 12 Mar 2016 22:11:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/29292</link>
      <guid>https://ruby-china.org/topics/29292</guid>
    </item>
    <item>
      <title>求 ruby 实习机会</title>
      <description>&lt;p&gt;新学 ruby，原来是 java 工程师，2 年工作经验&lt;/p&gt;

&lt;p&gt;以前是 java 码农。在两家公司干过，第一家是互联网创业。做在线车险，第二家传统行业做银行项目&lt;/p&gt;

&lt;p&gt;ruby 看过著名的锄头书。还有《ruby 元编程》 ，最近在看 ruby cookbook, 和 Build Awesome Command-Line Applications in Ruby 2&lt;/p&gt;

&lt;p&gt;目前在就是学了 ruby 基础和 rails。需要的话，可以留个邮箱。我写个详细简历&lt;/p&gt;</description>
      <author>codemonkey</author>
      <pubDate>Tue, 28 Jul 2015 22:28:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/26682</link>
      <guid>https://ruby-china.org/topics/26682</guid>
    </item>
    <item>
      <title>为什么我用 taobao 和官方 gem 仓库无法安装 arel6.0.2</title>
      <description>&lt;p&gt;我发现 arel gem 包。已经是 6.0.2 了。最新版，但是通过 taobao 的源或者官方源。无法安装 6.0.2，只能安 6.0.0&lt;/p&gt;</description>
      <author>codemonkey</author>
      <pubDate>Sun, 12 Jul 2015 20:56:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/26456</link>
      <guid>https://ruby-china.org/topics/26456</guid>
    </item>
    <item>
      <title>gem install mysql 遇到问题及解决方案</title>
      <description>&lt;p&gt;前几天遇到的问题，是使用 gem install mysql 遇到的。报下面的错误&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Building native extensions. This could take a &lt;span class="k"&gt;while&lt;/span&gt;...
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.

/usr/bin/ruby1.9.1 extconf.rb
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in &lt;span class="sb"&gt;`&lt;/span&gt;require&lt;span class="s1"&gt;': cannot load such file -- mkmf (LoadError)
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'&lt;/span&gt;
from extconf.rb:2:in &lt;span class="sb"&gt;`&lt;/span&gt;&amp;lt;main&amp;gt;&lt;span class="s1"&gt;'


Gem files will remain installed in /home/c4t/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.18 for inspection.
Results logged to /home/c4t/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.18/ext/mysql2/gem_make.out
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后来我分析。我根本没有安 1.9.1，报的错误信息和 1.9.1 有关，后我我用 ruby --version 查看。发现 ruby 竟然也是 1.9.1，但是我没有安装 ruby1.9.1，&lt;/p&gt;

&lt;p&gt;后来使用 sudo apt-get autoremove 果断卸载 ruby 1.9.1，结果出人意料。我的 vim 出问题了。后来我用从新安装 vim，结果发现原来是安装 vim 是自动安装上了 ruby1.9.1，但是我在 rvm 里看 current 版本是 2.2.1&lt;/p&gt;

&lt;p&gt;先不说别的，还是把 vim 按上 &lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;vim-gnome
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这时候 ruby 是 1.9.1&lt;/p&gt;

&lt;p&gt;我使用 rvm use 2.2.1 报错&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="s2"&gt;"RVM is not a function, selecting rubies with 'rvm use ...' will not work."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是我使用 rvm list 都是好用的啊。后来我搜索找到这个地方&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.sina.com.cn/s/blog_9d6e035501010lol.html" rel="nofollow" target="_blank"&gt;http://blog.sina.com.cn/s/blog_9d6e035501010lol.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;原来安装 rvm 时候。少了这一句在我的.zshrc 中，&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.rvm/scripts/rvm"&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.rvm/scripts/rvm"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;果断填上，之后。执行&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rvm use 2.2.1

  ~  ruby &lt;span class="nt"&gt;--version&lt;/span&gt;
ruby 2.2.1p85 &lt;span class="o"&gt;(&lt;/span&gt;2015-02-26 revision 49769&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;x86_64-linux]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后安装 mysql2 或者 mysql&lt;/p&gt;

&lt;p&gt;总结： &lt;/p&gt;

&lt;p&gt;1 rvm 安装成功后。.zshrc 中少了下面这句代码，填上&lt;/p&gt;

&lt;p&gt;[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;amp;&amp;amp; source "$HOME/.rvm/scripts/rvm"&lt;/p&gt;

&lt;p&gt;2 安装 vim 会自动安装 1.9.1 要记得安装 vim 后要使用 rvm use 修改你安装的版本&lt;/p&gt;</description>
      <author>codemonkey</author>
      <pubDate>Sun, 12 Jul 2015 06:48:37 +0800</pubDate>
      <link>https://ruby-china.org/topics/26448</link>
      <guid>https://ruby-china.org/topics/26448</guid>
    </item>
    <item>
      <title>读 programming ruby 第二版，7.6 循环，遇到一个看不懂的问题</title>
      <description>&lt;p&gt;请教请教一个问题
当计算到第二行的时候  f.lineno 是 2 line 是 second
 ((f.lineno == 1) || line.chomp =~ /eig/) 为假
((f.lineno== 3) || line.chomp =~ /nin/) 为假
但是 lineno 是在 1..3 范围中所以打印了 second?&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2015/60792519413c85f4b2880bf77ff917c4.png" title="" alt=""&gt;
&lt;img src="https://l.ruby-china.com/photo/2015/f83fe2927d1fe60a0ac179ea243bb4c1.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;这个 ((f.lineno == 1) || line.chomp =~ /eig/)..((f.lineno== 3) || line.chomp =~ /nin/)  每次循环是怎么计算的。&lt;/p&gt;

&lt;p&gt;我理解是 先计算第一个 ((f.lineno == 1) || line.chomp =~ /eig/) 这个结果是 true.那 if 判断就是真，
但是第二行   f.lineno 是 2 line 是 second   ((f.lineno == 1) || line.chomp =~ /eig/)和((f.lineno== 3) || line.chomp =~ /nin/)  都是假啊。为什么会打印 second。&lt;/p&gt;

&lt;p&gt;是不是前面我说的，但是 lineno 是在 1..3 范围中所以打印了 second?&lt;/p&gt;</description>
      <author>codemonkey</author>
      <pubDate>Wed, 22 Apr 2015 11:32:55 +0800</pubDate>
      <link>https://ruby-china.org/topics/25247</link>
      <guid>https://ruby-china.org/topics/25247</guid>
    </item>
  </channel>
</rss>
