kaku'blog
我是一个在黑暗中大雪纷飞的人啊
2015-12-01T15:03:17.000Z
http://yoursite.com/
kaku
Hexo
LPIC学习笔记
http://yoursite.com/2015/12/01/2015-12-01-dairy/
2015-12-01T13:49:00.000Z
2015-12-01T15:03:17.000Z
<p>今日のLPIC勉強メモ</p>
<p>1.自分の所属グループを表示するにはgroupsコマンドを使う。</p>
<p>2.ファイル作成時にアプリケーションが指定するパーミッションが666</p>
<p>3.ディレクトリ作成時指定するパーミッションが777</p>
<p>4.umaskコマンドでの変更は子プロセスでのみ有効に成る</p>
<p>5.SUIDはパーミションに4000もしくは所有者にsを付与する SUIDの使用例としては/usr/bin/passwdがある <br> passwdコマンドで/etc/shadowファイルの書き換えを実行時どのユーザが実行した場合でもroot権限で実行されるようになっています。</p>
<p>6.スティッキービットが特定のディレクトリに対してアクセス権が許可されていてもファイルの削除はおこえないよう保護する設定です。 <br> chmod 1000 ファイルもしくはchmod o+t </p>
<p>今日のLPIC勉強メモ</p>
<p>1.自分の所属グループを表示するにはgroupsコマンドを使う。</p>
<p>2.ファイル作成時にアプリケーションが指定するパーミッションが666</p>
<p>3.ディレクトリ作成時指定するパーミッションが777</p>
<p>4.
vim cheat sheet
http://yoursite.com/2015/11/27/2015-11-27-vi-cheat-sheet/
2015-11-27T14:46:00.000Z
2015-11-27T15:00:48.000Z
<p>发现了一张特别牛逼的图。<br>用了vim以后会上瘾的。</p>
<p><img src="http://www.viemu.com/vi-vim-cheat-sheet.gif" alt="vim cheat sheet"> </p>
<p>发现了一张特别牛逼的图。<br>用了vim以后会上瘾的。</p>
<p><img src="http://www.viemu.com/vi-vim-cheat-sheet.gif" alt="vim cheat sheet"> </p>
如何重新搭建一个已经存在的Octopress博客
http://yoursite.com/2015/11/27/2015-11-27-about-linux/
2015-11-27T13:46:00.000Z
2015-11-27T13:58:25.000Z
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">clone</span> git@github.com:username/username.github.com.git</span><br><span class="line">$ <span class="built_in">cd</span> username.github.com</span><br><span class="line">username.github.com$ git checkout <span class="built_in">source</span></span><br><span class="line">username.github.com$ mkdir _deploy</span><br><span class="line">username.github.com$ <span class="built_in">cd</span> _deploy</span><br><span class="line">username.github.com/_deploy$ git init</span><br><span class="line">username.github.com/_deploy$ git remote add origin git@github.com:username/username.github.com.git</span><br><span class="line">username.github.com/_deploy$ git pull origin master</span><br><span class="line">username.github.com/_deploy$ <span class="built_in">cd</span> ..</span><br><span class="line">username.github.com$</span><br></pre></td></tr></table></figure>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class=
rails gem系列之CarrierWave
http://yoursite.com/2015/02/11/2015-02-11-carrierwave/
2015-02-11T13:50:00.000Z
2015-05-09T10:58:22.000Z
<p>##概要<br>CarrierWave是rails中用来上传文件的gem。类似的gem还有PaperClip。</p>
<p>##和PaperClip的区别<br>1.PaperClip简单易用</p>
<p>2.CarrierWave的功能较多,应用广泛</p>
<p>##用法</p>
<p>先来做一个测试用的project吧</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">rails new test</span><br><span class="line">cd test</span><br><span class="line">rails g scaffold Product <span class="symbol">name:</span>string </span><br><span class="line">rake <span class="symbol">db:</span>migrate</span><br><span class="line">rails s</span><br></pre></td></tr></table></figure>
<p>加入CarrierWave的gem</p>
<figure class="highlight ruby"><figcaption><span>Gemfile</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gem <span class="string">'carrierwave'</span></span><br></pre></td></tr></table></figure>
<p>安装</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bundle install</span><br></pre></td></tr></table></figure>
<p>生成carrierwave的配置文件</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">rails g uploader Image</span><br><span class="line"> create app/uploaders/image_uploader.rb</span><br></pre></td></tr></table></figure>
<p>加入image列</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">rails g migration add_image_to_product <span class="symbol">image:</span>string</span><br><span class="line">rake <span class="symbol">db:</span>migrate</span><br></pre></td></tr></table></figure>
<p>向model中加入mount_uploader方法</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># app/models/product.rb</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Product</span> < ActiveRecord::Base</span></span><br><span class="line"> mount_uploader <span class="symbol">:image</span>, ImageUploader</span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>向form中加入上传组件,其中指定hidden属性image_cache的作用就是当提交form时发生error上传的文件或者图片可以保存起来,不用再上传一次。</p>
<figure class="highlight erb"><figcaption><span>_form.html.erb</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><!-- 开始 --></span><br><span class="line"> <div class="field"></span><br><span class="line"> <%<span class="ruby"> <span class="keyword">if</span> @product.image? </span>%></span><br><span class="line"> <div class="thumbnail"></span><br><span class="line"> <%=<span class="ruby"> image_tag @product.image.url </span>%></span><br><span class="line"> </div></span><br><span class="line"> <%<span class="ruby"> <span class="keyword">end</span> </span>%><br></span><br><span class="line"> <%=<span class="ruby"> f.label <span class="symbol">:image</span> </span>%><br></span><br><span class="line"> <%=<span class="ruby"> f.file_field <span class="symbol">:image</span> </span>%></span><br><span class="line"> <%=<span class="ruby"> f.hidden_field <span class="symbol">:image_cache</span> </span>%></span><br><span class="line"> </div></span><br><span class="line"> <div class="field"></span><br><span class="line"> <!-- 既存product且存在图片--></span><br><span class="line"> <%<span class="ruby"> <span class="keyword">if</span> @product.persisted? && @product.image? </span>%></span><br><span class="line"> <label></span><br><span class="line"> <%=<span class="ruby"> f.check_box <span class="symbol">:remove_image</span> </span>%></span><br><span class="line"> 删除</span><br><span class="line"> </label></span><br><span class="line"> <%<span class="ruby"> <span class="keyword">end</span> </span>%></span><br><span class="line"> </div></span><br><span class="line"> <!-- 结束 --></span><br></pre></td></tr></table></figure>
<p>别忘了要在controller中加一下StrongParameter</p>
<figure class="highlight ruby"><figcaption><span>products_controller.rb</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">product_params</span></span></span><br><span class="line"> params.<span class="keyword">require</span>(<span class="symbol">:product</span>).permit(<span class="symbol">:name</span>, <span class="symbol">:price</span>, <span class="symbol">:image</span>, <span class="symbol">:image_cache</span>, <span class="symbol">:remove_image</span>)</span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>添加显示部分的image_tag代码</p>
<figure class="highlight erb"><figcaption><span>show.html.erb</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><p></span><br><span class="line"> <strong>Image:</strong></span><br><span class="line"> <%<span class="ruby"> <span class="keyword">if</span> @product.image? </span>%></span><br><span class="line"> <div class="thumbnail"></span><br><span class="line"> <%=<span class="ruby"> image_tag @product.image.url </span>%></span><br><span class="line"> </div></span><br><span class="line"> <%<span class="ruby"> <span class="keyword">end</span> </span>%></span><br><span class="line"></p></span><br></pre></td></tr></table></figure>
<p>就这些,大功告成,很简单。</p>
<p>##概要<br>CarrierWave是rails中用来上传文件的gem。类似的gem还有PaperClip。</p>
<p>##和PaperClip的区别<br>1.PaperClip简单易用</p>
<p>2.CarrierWave的功能较多,应用广泛</p>
<p>#
rails gem系列之ransack
http://yoursite.com/2015/02/08/2015-02-08-ransack/
2015-02-08T11:02:00.000Z
2015-05-09T10:58:22.000Z
<p>##概要</p>
<p>ransack是一个用来实现检索功能的gem。</p>
<p>github地址: <a href="https://github.com/activerecord-hackery/ransack" target="_blank" rel="external">https://github.com/activerecord-hackery/ransack</a></p>
<p>示例网站:<a href="http://ransack-demo.herokuapp.com" target="_blank" rel="external">http://ransack-demo.herokuapp.com</a></p>
<p>##安装</p>
<figure class="highlight ruby"><figcaption><span>Gemfile</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gem <span class="string">'ransack'</span></span><br></pre></td></tr></table></figure>
<p>然后执行bundle就可以了。</p>
<p>##使用方法</p>
<p>在controller中如下使用,注意参数:q为ransack的固定写法。里面放了view传过来的检索项的值。</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">index</span></span></span><br><span class="line"> @q = Person.ransack(params[<span class="symbol">:q</span>])</span><br><span class="line"> @people = @q.result(<span class="symbol">distinct:</span> <span class="keyword">true</span>)</span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>view中的写法如下。</p>
<figure class="highlight erb"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><%=<span class="ruby"> search_form_for @q <span class="keyword">do</span> |f| </span>%></span><br><span class="line"></span><br><span class="line"> # Search if the name field contains...</span><br><span class="line"> <%=<span class="ruby"> f.label <span class="symbol">:name_cont</span> </span>%></span><br><span class="line"> <%=<span class="ruby"> f.search_field <span class="symbol">:name_cont</span> </span>%></span><br><span class="line"></span><br><span class="line"> # Search if an associated articles.title starts with...</span><br><span class="line"> <%=<span class="ruby"> f.label <span class="symbol">:articles_title_start</span> </span>%></span><br><span class="line"> <%=<span class="ruby"> f.search_field <span class="symbol">:articles_title_start</span> </span>%></span><br><span class="line"></span><br><span class="line"> # Attributes may be chained. Search multiple attributes for one value...</span><br><span class="line"> <%=<span class="ruby"> f.label <span class="symbol">:name_or_description_or_email_or_articles_title_cont</span> </span>%></span><br><span class="line"> <%=<span class="ruby"> f.search_field <span class="symbol">:name_or_description_or_email_or_articles_title_cont</span> </span>%></span><br><span class="line"></span><br><span class="line"> <%=<span class="ruby"> f.submit </span>%></span><br><span class="line"><%<span class="ruby"> <span class="keyword">end</span> </span>%></span><br></pre></td></tr></table></figure>
<p>##search的写法</p>
<p>eq表示等于</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:name_eq</span> => <span class="string">'test'</span>).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE `items`.`name` = 'test')"</span></span><br></pre></td></tr></table></figure>
<p>lt表示小于</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:price_lt</span> => <span class="number">1000</span>).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE `items`.`price` < 1000)"</span></span><br></pre></td></tr></table></figure>
<p>gt表示大于</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:price_gt</span> => <span class="number">1000</span>).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE `items`.`price` > 1000)"</span></span><br></pre></td></tr></table></figure>
<p>in表示sql中的in<br><figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:category_id_in</span> => [<span class="number">5</span>,<span class="number">10</span>,<span class="number">15</span>,<span class="number">20</span>]).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE `items`.`category_id` IN (5,10,15,20))"</span></span><br></pre></td></tr></table></figure></p>
<p>cont表示包含,模糊查询</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:name_cont</span> => <span class="string">'test'</span>).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE `items`.`name` LIKE '%test%')"</span></span><br></pre></td></tr></table></figure>
<p>start表示前端一致</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:name_start</span> => <span class="string">'test'</span>).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE `items`.`name` LIKE 'test%')"</span></span><br></pre></td></tr></table></figure>
<p>组合用法</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:name_and_description_cont</span> => <span class="string">'test'</span>).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE (((`items`.`name` LIKE '%test%') AND (`items`.`description` LIKE '%test%')))"</span></span><br><span class="line">Item.search(<span class="symbol">:name_or_description_cont</span> => <span class="string">'test'</span>).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE (((`items`.`name` LIKE '%test%') OR (`items`.`description` LIKE '%test%')))"</span></span><br></pre></td></tr></table></figure>
<p>条件组合<br>末尾加_all是AND关系,末尾加_any是OR关系</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:name_cont_all</span> => [<span class="string">'AAA'</span>, <span class="string">'BBB'</span>]).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE (((`items`.`name` LIKE '%AAA%') AND (`items`.`name` LIKE '%BBB%')))"</span></span><br><span class="line">Item.search(<span class="symbol">:name_cont_any</span> => [<span class="string">'AAA'</span>, <span class="string">'BBB'</span>]).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` WHERE (((`items`.`name` LIKE '%AAA%') OR (`items`.`name` LIKE '%BBB%')))"</span></span><br></pre></td></tr></table></figure>
<p>相关模型检索</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Item.search(<span class="symbol">:comments_body_cont</span> => <span class="string">'test'</span>).result.to_sql</span><br><span class="line"><span class="comment"># => "SELECT `items`.* FROM `items` LEFT OUTER JOIN `item_comments` ON `item_comments`.`item_id` = `items`.`id` WHERE `item_comments`.`body` LIKE '%test%'"</span></span><br></pre></td></tr></table></figure>
<p>##表头排序</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><%= sort_link(@q, <span class="symbol">:name</span>) %></span><br></pre></td></tr></table></figure>
<p>加别名,加默认排序</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><%= sort_link(@q, <span class="symbol">:name</span>, <span class="string">'Last Name'</span>, <span class="symbol">default_order:</span> <span class="symbol">:desc</span>) %></span><br></pre></td></tr></table></figure>
<p>##概要</p>
<p>ransack是一个用来实现检索功能的gem。</p>
<p>github地址: <a href="https://github.com/activerecord-hackery/ransack" target="_blank" rel="exter
rails gem系列之kaminari
http://yoursite.com/2015/02/07/2015-02-07-kaminari/
2015-02-07T14:02:00.000Z
2015-05-09T10:58:22.000Z
<p>##概要<br>kaminari是rails项目中常用的分页gem</p>
<p>github地址:<a href="https://github.com/amatsuda/kaminari" target="_blank" rel="external">https://github.com/amatsuda/kaminari</a></p>
<p>##安装</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gem <span class="string">'kaminari'</span></span><br></pre></td></tr></table></figure>
<p>然后执行bundle就可以了。</p>
<p>##基本使用</p>
<p>分页的写法如下,默认为25行一页。改行数在后面加.per(行数)就可以了。<br><figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">index</span></span></span><br><span class="line"> @items = Item.page(params[<span class="symbol">:page</span>])</span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure></p>
<p>view中加一行就会生成翻页部分了。so easy.<br><figure class="highlight ruby"><figcaption><span>index.html.erb</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><%= paginate @items %></span><br></pre></td></tr></table></figure></p>
<p>##更改翻页样式</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rails g <span class="symbol">kaminari:</span>views default</span><br></pre></td></tr></table></figure>
<p>这样就会在app/views/kaminari下生成翻页部分的代码,可以按自己的喜好修改。</p>
<p>当然我们还可以选择bootstrap样式的翻页。直接clone下来就可以用了。当然前提是要先装好bootstrap。<br><a href="https://github.com/gabetax/twitter-bootstrap-kaminari-views" target="_blank" rel="external">https://github.com/gabetax/twitter-bootstrap-kaminari-views</a></p>
<p>##ajax翻页</p>
<figure class="highlight ruby"><figcaption><span>posts_controller.rb</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">respond_to <span class="symbol">:html</span>, <span class="symbol">:js</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">index</span></span></span><br><span class="line"> @posts = Post.page(params[<span class="symbol">:page</span>]).per(<span class="number">10</span>)</span><br><span class="line"> respond_with(@posts)</span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>列表部分放到partial中<br><figure class="highlight ruby"><figcaption><span>_posts.html.erb</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><% @posts.each <span class="keyword">do</span> |post| %></span><br><span class="line">省略</span><br></pre></td></tr></table></figure></p>
<figure class="highlight ruby"><figcaption><span>index.js.erb</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$(<span class="string">"#posts"</span>).html(<span class="string">"<%= j(render :partial => 'posts') %>"</span>);</span><br></pre></td></tr></table></figure>
<figure class="highlight"><figcaption><span>index.html.erb</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"> <div id="posts"></span><br><span class="line"> <%= render :partial => "posts" %></span><br><span class="line"></div></span><br><span class="line"></span><br><span class="line"><%= paginate @posts %></span><br></pre></td></tr></table></figure>
<p>##概要<br>kaminari是rails项目中常用的分页gem</p>
<p>github地址:<a href="https://github.com/amatsuda/kaminari" target="_blank" rel="external">https://g
rails gem系列之ffaker
http://yoursite.com/2015/02/06/2015-02-06-ffaker/
2015-02-06T14:17:00.000Z
2015-05-09T10:58:22.000Z
<p>##概要</p>
<p>ffaker可以用来生成测试数据,在rails的seed.rb文件中写少量的代码然后执行<br>rake db:seed 就可以生成大量的测试数据。</p>
<p>fmaker的github地址:<br><a href="https://github.com/emmanueloga/ffaker" target="_blank" rel="external">https://github.com/emmanueloga/ffaker</a></p>
<p>##和faker的关系</p>
<ol>
<li>ffaker是faker的重写版。</li>
<li>ffaker要比faker执行快。</li>
</ol>
<p>##和faker的速度比较</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">bench1000</span></span></span><br><span class="line"> start = Time.now </span><br><span class="line"> <span class="number">1000</span>.times{<span class="keyword">yield</span>}</span><br><span class="line"> finish = Time.now </span><br><span class="line"> puts <span class="string">"Time: <span class="subst">#{(finish - start).to_f}</span>"</span> </span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>faker的执行时间<br><figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">require</span> <span class="string">'faker'</span></span><br><span class="line">bench100<span class="number">0</span>{<span class="symbol">Faker:</span><span class="symbol">:Name</span>.name}</span><br><span class="line"><span class="comment"># => Time: 0.186539</span></span><br></pre></td></tr></table></figure></p>
<p>ffaker的执行时间<br><figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">require</span> <span class="string">'ffaker'</span></span><br><span class="line">bench100<span class="number">0</span>{<span class="symbol">Faker:</span><span class="symbol">:Name</span>.name}</span><br><span class="line"><span class="comment"># => Time: 0.009986</span></span><br></pre></td></tr></table></figure></p>
<p>快了不止一点点啊。。。。</p>
<p>##使用方法</p>
<p>安装</p>
<figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gem install ffaker</span><br></pre></td></tr></table></figure>
<p>在seed.rb中添加类似这样的生成代码,然后执行rake db:seed就可以生成测试数据了。</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">10</span>.times <span class="keyword">do</span></span><br><span class="line"> User.create(<span class="symbol">name:</span> <span class="symbol">Faker:</span><span class="symbol">:Name</span>.name, <span class="symbol">profile:</span> <span class="symbol">Faker:</span><span class="symbol">:Lorem</span>.sentence(<span class="number">10</span>))</span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>##常用API<br><figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="symbol">Faker:</span><span class="symbol">:Name</span>.name <span class="comment">#=> "Christophe Bartell"</span></span><br><span class="line"></span><br><span class="line"><span class="symbol">Faker:</span><span class="symbol">:Internet</span>.email <span class="comment">#=> "kirsten.greenholt<span class="doctag">@corkeryfisher</span>.info"</span></span><br><span class="line"></span><br><span class="line"><span class="symbol">Faker:</span><span class="symbol">:PhoneNumber</span>.cell_phone <span class="comment">#=> "(186)285-7925"</span></span><br><span class="line"></span><br><span class="line"><span class="symbol">Faker:</span><span class="symbol">:Lorem</span>.sentence <span class="comment">#=> "Dolore illum animi et neque accusantium."</span></span><br><span class="line"></span><br><span class="line"><span class="symbol">Faker:</span><span class="symbol">:Lorem</span>.paragraph <span class="comment">#=> "Neque dicta enim quasi. Qui corrupti est quisquam. Facere animi quod aut. Qui nulla consequuntur consectetur sapiente."</span></span><br><span class="line"></span><br><span class="line"><span class="symbol">Faker:</span><span class="symbol">:Number</span>.number(<span class="number">10</span>) <span class="comment">#=> "1968353479"</span></span><br><span class="line"></span><br><span class="line"><span class="symbol">Faker:</span><span class="symbol">:Internet</span>.password(<span class="number">8</span>) <span class="comment">#=> "yfgjik0hgzdqs0"</span></span><br><span class="line"></span><br><span class="line"><span class="symbol">Faker:</span><span class="symbol">:Business</span>.credit_card_number <span class="comment">#=> "1228-1221-1221-1431"</span></span><br></pre></td></tr></table></figure></p>
<p>其他详细用法请详见这里 <a href="http://www.rubydoc.info/gems/faker/1.4.3" target="_blank" rel="external">http://www.rubydoc.info/gems/faker/1.4.3</a></p>
<p>##概要</p>
<p>ffaker可以用来生成测试数据,在rails的seed.rb文件中写少量的代码然后执行<br>rake db:seed 就可以生成大量的测试数据。</p>
<p>fmaker的github地址:<br><a href="https://github
rails gem系列之settingslogic
http://yoursite.com/2015/02/04/2015-02-04-settingslogic/
2015-02-04T12:37:00.000Z
2015-05-09T10:58:22.000Z
<p>##概要</p>
<p>可以从配置文件简单读取配置的gem</p>
<p>github地址:<a href="https://github.com/binarylogic/settingslogic" target="_blank" rel="external">https://github.com/binarylogic/settingslogic</a></p>
<p>安装</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">gem install settingslogic</span><br></pre></td></tr></table></figure>
<p>定义class app/models/settings.rb</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Settings</span> < Settingslogic</span></span><br><span class="line"> source <span class="string">"<span class="subst">#{Rails.root}</span>/config/application.yml"</span></span><br><span class="line"> namespace Rails.env</span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>创建配置文件 config/application.yml</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="symbol">defaults:</span> &defaults</span><br><span class="line"> <span class="symbol">cool:</span></span><br><span class="line"> <span class="symbol">saweet:</span> nested settings</span><br><span class="line"> <span class="symbol">neat_setting:</span> <span class="number">24</span></span><br><span class="line"> <span class="symbol">awesome_setting:</span> <%= <span class="string">"Did you know 5 + 5 = <span class="subst">#{<span class="number">5</span> + <span class="number">5</span>}</span>?"</span> %></span><br><span class="line"></span><br><span class="line"><span class="symbol">development:</span></span><br><span class="line"> <<<span class="symbol">:</span> *defaults</span><br><span class="line"> <span class="symbol">neat_setting:</span> <span class="number">800</span></span><br><span class="line"></span><br><span class="line"><span class="symbol">test:</span></span><br><span class="line"> <<<span class="symbol">:</span> *defaults</span><br><span class="line"></span><br><span class="line"><span class="symbol">production:</span></span><br><span class="line"> <<<span class="symbol">:</span> *defaults</span><br></pre></td></tr></table></figure>
<p>之后在rails console里面测试一下,就可以拿到配置文件里的值了</p>
<figure class="highlight ruby"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">>></span> Rails.env</span><br><span class="line">=> <span class="string">"development"</span></span><br><span class="line"></span><br><span class="line"><span class="meta">>></span> Settings.cool</span><br><span class="line">=> <span class="string">"#<Settingslogic::Settings ... >"</span></span><br><span class="line"></span><br><span class="line"><span class="meta">>></span> Settings.cool.saweet</span><br><span class="line">=> <span class="string">"nested settings"</span></span><br><span class="line"></span><br><span class="line"><span class="meta">>></span> Settings.neat_setting</span><br><span class="line">=> <span class="number">800</span></span><br><span class="line"></span><br><span class="line"><span class="meta">>></span> Settings.awesome_setting</span><br><span class="line">=> <span class="string">"Did you know 5 + 5 = 10?"</span></span><br></pre></td></tr></table></figure>
<p>##概要</p>
<p>可以从配置文件简单读取配置的gem</p>
<p>github地址:<a href="https://github.com/binarylogic/settingslogic" target="_blank" rel="external">https
安装auto-fu.zsh让命令输入自动补全
http://yoursite.com/2015/02/01/2015-02-01-an-zhuang-auto-fu-dot-zshrang-ming-ling-shu-ru-zi-dong-bu-quan/
2015-02-01T05:44:00.000Z
2015-05-09T10:58:22.000Z
<p><img src="https://github.com/hchbaw/auto-fu.zsh/raw/readme/auto-fu.gif" alt=""></p>
<ul>
<li>下载auto-fu.zsh</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> ~/.oh-my-zsh/custom/plugins</span><br><span class="line">git <span class="built_in">clone</span> https://github.com/hchbaw/auto-fu.zsh.git auto-fu</span><br></pre></td></tr></table></figure>
<ul>
<li>执行zcompile</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">A=~/.oh-my-zsh/custom/plugins/auto-fu/auto-fu.zsh; (zsh -c <span class="string">"source <span class="variable">$A</span> ; auto-fu-zcompile <span class="variable">$A</span> ~/.zsh"</span>)</span><br></pre></td></tr></table></figure>
<ul>
<li>添加下面的设置到zshrc中</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">## auto-fu.zsh stuff.</span></span><br><span class="line"><span class="comment"># source ~/.oh-my-zsh/custom/plugins/auto-fu/auto-fu.zsh</span></span><br><span class="line">{ . ~/.zsh/auto-fu; auto-fu-install; }</span><br><span class="line"><span class="built_in">zstyle</span> <span class="string">':auto-fu:highlight'</span> input bold</span><br><span class="line"><span class="built_in">zstyle</span> <span class="string">':auto-fu:highlight'</span> completion <span class="built_in">fg</span>=black,bold</span><br><span class="line"><span class="built_in">zstyle</span> <span class="string">':auto-fu:var'</span> postdisplay $<span class="string">'\n-azfu-'</span></span><br><span class="line"><span class="built_in">zle</span>-line-<span class="function"><span class="title">init</span></span> () {auto-fu-init;}; <span class="built_in">zle</span> -N <span class="built_in">zle</span>-line-init</span><br></pre></td></tr></table></figure>
<ul>
<li>重新编译zshrc</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> ~/.zshrc</span><br></pre></td></tr></table></figure>
<p><img src="https://github.com/hchbaw/auto-fu.zsh/raw/readme/auto-fu.gif" alt=""></p>
<ul>
<li>下载auto-fu.zsh</li>
</ul>
<figure class="high
zsh下git命令Cheat-sheet
http://yoursite.com/2015/02/01/2015-02-01-git-commond/
2015-02-01T05:20:00.000Z
2015-05-09T10:58:22.000Z
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><span class="line">g - git</span><br><span class="line">gst - git status</span><br><span class="line">gl - git pull</span><br><span class="line">gup - git pull --rebase</span><br><span class="line">gp - git push</span><br><span class="line">gd - git diff</span><br><span class="line">gdc - git diff --cached</span><br><span class="line">gdv - git diff -w "$@" | view -</span><br><span class="line">gc - git commit -v</span><br><span class="line">gc! - git commit -v --amend</span><br><span class="line">gca - git commit -v -a</span><br><span class="line">gca! - git commit -v -a --amend</span><br><span class="line">gcmsg - git commit -m</span><br><span class="line">gco - git checkout</span><br><span class="line">gcm - git checkout master</span><br><span class="line">gr - git remote</span><br><span class="line">grv - git remote -v</span><br><span class="line">grmv - git remote rename</span><br><span class="line">grrm - git remote remove</span><br><span class="line">gsetr - git remote set-url</span><br><span class="line">grup - git remote update</span><br><span class="line">grbi - git rebase -i</span><br><span class="line">grbc - git rebase --continue</span><br><span class="line">grba - git rebase --abort</span><br><span class="line">gb - git branch</span><br><span class="line">gba - git branch -a</span><br><span class="line">gcount - git shortlog -sn</span><br><span class="line">gcl - git config --list</span><br><span class="line">gcp - git cherry-pick</span><br><span class="line">glg - git log --stat --max-count=10</span><br><span class="line">glgg - git log --graph --max-count=10</span><br><span class="line">glgga - git log --graph --decorate --all</span><br><span class="line">glo - git log --oneline --decorate --color</span><br><span class="line">glog - git log --oneline --decorate --color --graph</span><br><span class="line">gss - git status -s</span><br><span class="line">ga - git add</span><br><span class="line">gm - git merge</span><br><span class="line">grh - git reset HEAD</span><br><span class="line">grhh - git reset HEAD --hard</span><br><span class="line">gclean - git reset --hard && git clean -dfx</span><br><span class="line">gwc - git whatchanged -p --abbrev-commit --pretty=medium</span><br><span class="line">gsts - git stash show --text</span><br><span class="line">gsta - git stash</span><br><span class="line">gstp - git stash pop</span><br><span class="line">gstd - git stash drop</span><br><span class="line">ggpull - git pull origin $(current_branch)</span><br><span class="line">ggpur - git pull --rebase origin $(current_branch)</span><br><span class="line">ggpush - git push origin $(current_branch)</span><br><span class="line">ggpnp - git pull origin $(current_branch) && git push origin $(current_branch)</span><br><span class="line">glp - _git_log_prettily</span><br></pre></td></tr></table></figure>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class
rails gem系列之devise
http://yoursite.com/2015/01/26/2015-01-26-devise/
2015-01-26T13:48:00.000Z
2015-05-09T10:58:22.000Z
<h1 id="Devise"><a href="#Devise" class="headerlink" title="Devise"></a>Devise</h1><h2 id="概要"><a href="#概要" class="headerlink" title="概要"></a>概要</h2><p>最有人气的登陆验证gem。ORM支持ActiveRecord和Mongodb。</p>
<h2 id="基本使用方法"><a href="#基本使用方法" class="headerlink" title="基本使用方法"></a>基本使用方法</h2><p>创建project</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">rails new blog</span><br><span class="line">cd blog</span><br></pre></td></tr></table></figure>
<p>Gemfile中加入devise gem</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"># Gemfile</span><br><span class="line">gem 'devise'</span><br></pre></td></tr></table></figure>
<p>运行bundle install</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bundle install</span><br></pre></td></tr></table></figure>
<p>安装devise</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rails g devise:install</span><br></pre></td></tr></table></figure>
<p>指定发送邮件时的host名</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">#config/environments/development.rb</span><br><span class="line">Rails.application.configure do</span><br><span class="line"> ...</span><br><span class="line"> # deviseの設定</span><br><span class="line"> config.action_mailer.default_url_options = { host: 'localhost:3000' }</span><br><span class="line">end</span><br></pre></td></tr></table></figure>
<p>指定root_url</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"># config/routes.rb</span><br><span class="line"> root to: "home#index"</span><br><span class="line"> ...</span><br></pre></td></tr></table></figure>
<p>加入错误消息显示部分代码</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"># app/views/layouts/application.html.erb</span><br><span class="line"><body></span><br><span class="line"><p class="notice"><%= notice %></p></span><br><span class="line"><p class="alert"><%= alert %></p></span><br><span class="line"></span><br><span class="line"><%= yield %></span><br><span class="line"></span><br><span class="line"></body></span><br><span class="line"></html></span><br></pre></td></tr></table></figure>
<p>生成devise model</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rails g devise user</span><br></pre></td></tr></table></figure>
<p>执行migrate</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rake db:migrate</span><br></pre></td></tr></table></figure>
<p>添加登陆,退出,注册,设置链接</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"># app/views/layouts/application.html.erb</span><br><span class="line">...</span><br><span class="line"><body></span><br><span class="line"><header></span><br><span class="line"> <nav></span><br><span class="line"> <!-- user_signed_in? devise的Helper方法,验证是否已登陆 --></span><br><span class="line"> <% if user_signed_in? %> </span><br><span class="line"> <!-- current_user 当前登陆User对象 --></span><br><span class="line"> <!-- *_path devise自动生成的路由,执行rake routes可以确认 --></span><br><span class="line"> Logged in as <strong><%= current_user.email %></strong>.</span><br><span class="line"> <%= link_to '设置', edit_user_registration_path %> |</span><br><span class="line"> <%= link_to "退出", destroy_user_session_path, method: :delete %></span><br><span class="line"> <% else %></span><br><span class="line"> <%= link_to "注册", new_user_registration_path %> |</span><br><span class="line"> <%= link_to "登陆", new_user_session_path %></span><br><span class="line"> <% end %></span><br><span class="line"> </nav></span><br><span class="line"></header></span><br><span class="line"></span><br><span class="line"><p class="notice"><%= notice %></p></span><br><span class="line"><p class="alert"><%= alert %></p></span><br><span class="line"></span><br><span class="line"><%= yield %></span><br><span class="line"></span><br><span class="line"></body></span><br><span class="line"></html></span><br></pre></td></tr></table></figure>
<p>启动服务,就可以看到画面啦。</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rails s</span><br></pre></td></tr></table></figure>
<h1 id="Devise"><a href="#Devise" class="headerlink" title="Devise"></a>Devise</h1><h2 id="概要"><a href="#概要" class="headerlink" title="概要"><
gulp入门
http://yoursite.com/2015/01/11/2015-01-11-about-gulp/
2015-01-10T16:05:00.000Z
2015-05-09T10:58:22.000Z
<p>##概要<br>前端任务自动化工具</p>
<p>##官方网站<br><a href="gulpjs.com">gulpjs.com</a></p>
<p>##相关知识<br>GoogleのWenStarterKit是用gulp来做的。</p>
<p>##环境<br>vagrant centos</p>
<p>##安装</p>
<pre><code>1. sudo yum -y install epel-release
2. sodu yum -y install nodejs npm
`node -v`确认node的版本号
`npm -v`确认npm的版本号
3. sudo npm install gulp -g
`gulp -v`确认gulp的版本号
</code></pre><p>##gulp和grunt的区别</p>
<table>
<thead>
<tr>
<th>gulp</th>
<th>grunt </th>
</tr>
</thead>
<tbody>
<tr>
<td> 插件少</td>
<td>插件多</td>
</tr>
<tr>
<td>8,398sta</td>
<td>8,439starM</td>
</tr>
<tr>
<td>2013/6/30</td>
<td>2011/9/18</td>
</tr>
<tr>
<td>gulpfie.js</td>
<td>Gruntfile.js</td>
</tr>
<tr>
<td>类似Node</td>
<td>类似JavaScript</td>
</tr>
<tr>
<td>Node的插件</td>
<td>Grunt的插件</td>
</tr>
</tbody>
</table>
<p>##和Grunt相比较的优点</p>
<p>1.配置文件比Grunt要少</p>
<p>2.比Grunt要快</p>
<p>##和Grunt相比的缺点</p>
<p>1.写法和Node接近,所以相对比较复杂</p>
<p>2.文档较少</p>
<p>##创建package.json<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">mkdir mysite</span><br><span class="line">cd mysite </span><br><span class="line">npm init</span><br><span class="line">npm install --save-dev gulp</span><br><span class="line">npm -i -D gulp</span><br><span class="line">rm -rf node_modules</span><br><span class="line">npm install</span><br></pre></td></tr></table></figure></p>
<p>##初识gulp.task()<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">var gulp = require('gulp');</span><br><span class="line"> gulp.task('hello', function(){</span><br><span class="line"> console.log('hello world!')</span><br><span class="line">})</span><br><span class="line"></span><br><span class="line">gulp.task('default', ['hello']);</span><br></pre></td></tr></table></figure></p>
<p>##文件拷贝</p>
<p>把当前目录里的package.json文件拷贝到当前目录中的dist文件夹中。</p>
<pre><code>var gulp = require('gulp');
gulp.task('copy', function() {
gulp.src('./package.json')
.pipe(gulp.dest('./dist'));
});
gulp.task('default',['copy']);
</code></pre><p>##gulp的常用5种API</p>
<ol>
<li>定义task<pre><code>gulp.task('name',['tasks'], function() {
// content
});
</code></pre></li>
<li>输入路径指定<pre><code>gulp.src('files')
.pipe(name(''))
</code></pre></li>
<li>执行task<pre><code>gulp.task('foo', function() {
gulp.run('bar');
});
</code></pre></li>
<li>输出路径指定<pre><code>.pipe(gulp.dest('folder'));
</code></pre></li>
<li>监视文件<pre><code>gulp.watch('files', function (event) {
console.log('js file changed!!');
});
</code></pre>详细API信息请参照这里 <a href="https://github.com/gulpjs/gulp/blob/master/docs/API.md" target="_blank" rel="external">github API</a></li>
</ol>
<p>##gulp task执行顺序</p>
<p>gulp的task默认为并行触发,若要顺序执行,要做如下处理。</p>
<ol>
<li>前面的task要写return</li>
<li>后面的task要加第二参数,值为前面的task<br>```<br>var gulp = require(‘gulp’);</li>
</ol>
<p>gulp.task(‘first’, function() {<br> return gulp.src(‘./package.json’)<br> .pipe(gulp.dest(‘./dist’));<br>});</p>
<p>gulp.task(‘second’,[‘first’], function() {<br> console.log(‘first task done!!’);<br>});</p>
<p>gulp.task(‘default’,[‘second’]);<br>``` </p>
<p>##概要<br>前端任务自动化工具</p>
<p>##官方网站<br><a href="gulpjs.com">gulpjs.com</a></p>
<p>##相关知识<br>GoogleのWenStarterKit是用gulp来做的。</p>
<p>##环境<br>vag
Rails3.0でモデルのER図を簡単に出力する方法
http://yoursite.com/2013/05/10/2013-05-10-20130515/
2013-05-10T00:38:00.000Z
2015-05-09T10:58:22.000Z
<pre><code>* graphvizをインストール
* Gemfileのdevelopment環境の設定に「gem "rails-erd"」を追加
* 「rake erd」を実行
</code></pre>
<pre><code>* graphvizをインストール
* Gemfileのdevelopment環境の設定に「gem "rails-erd"」を追加
* 「rake erd」を実行
</code></pre>
关于rails控制器的功能测试
http://yoursite.com/2013/03/15/2013-03-15-about-rails-functional-test/
2013-03-15T06:16:00.000Z
2015-05-09T10:58:22.000Z
<h1 id="控制器的功能测试"><a href="#控制器的功能测试" class="headerlink" title="控制器的功能测试"></a>控制器的功能测试</h1><pre><code>require File.dirname(__FILE__) + '/../test_helper'
</code></pre><p>关键在于setup方法,有三个东西<br> 1.controller<br> 2.request<br> 3.response</p>
<p>get()方法时由测试辅助类提供的,它会模拟controller的web请求,并获取控制器的响应,<br>然后用assert_response来检查是否应答正确</p>
<p>-n可以指定运行某一个特定的测试方法</p>
<pre><code>ruby test/functional/logni_controller_test.rb -n test_index
</code></pre><p>assert_redirected_to :action=>”login”</p>
<h1 id="Dynamic-Fixtures"><a href="#Dynamic-Fixtures" class="headerlink" title="Dynamic Fixtures"></a>Dynamic Fixtures</h1><p>在夹具中也可以使用ruby代码动态加入</p>
<p>assert_template “index” 对模版进行断言</p>
<h1 id="测试登录"><a href="#测试登录" class="headerlink" title="测试登录"></a>测试登录</h1><pre><code>def test_login
dave = users(:dave)
post :login, :nmae=>dave.name, :password=>'secret'
assert_redirected_to :action=>"index"
assert_equal dave.id, session[:user_id]
end
</code></pre><h1 id="HTTP请求方法"><a href="#HTTP请求方法" class="headerlink" title="HTTP请求方法"></a>HTTP请求方法</h1><p>get() 对指定的action执行一次HTTP GET请求,并将结果放入HTTP RESPONSE</p>
<pre><code>例: get(action,parameteres=nil,session=nil,flash=nil)
</code></pre><p>post() 提交表单</p>
<pre><code>例: post :edit, :user => {:name => "dave", :age => "24"}
模拟XMLHttp请求
xhr(method,action,parameters,session,flash)
</code></pre><p>put(),delete(),head()</p>
<h1 id="功能测试的断言"><a href="#功能测试的断言" class="headerlink" title="功能测试的断言"></a>功能测试的断言</h1><pre><code>assert_dom_equal(expected_html,actual_html,message)
例:assert_dom_equal(expected,@response.body)
assert_response(type,message)
type的种类
1.:success
2.:redirect
3.:missing
4.:error
例:assert_response :success
</code></pre><h1 id="变量"><a href="#变量" class="headerlink" title="变量"></a>变量</h1><pre><code>assigns(key=nil)
assert_not_nil assigns["items"]
session
assert_equal 2, session[:cart].items.size
flash
assert_equal "Danger!", flash[:notice]
cookies
assert_equal "Danger!", cookies[:name]
redirect_to_url
assert_equal "http://test.host/login", redirect_to_url
</code></pre><h1 id="辅助方法"><a href="#辅助方法" class="headerlink" title="辅助方法"></a>辅助方法</h1><pre><code>find_tag(conditions)
find_all_tag(conditions)
follow_redirect
fixture_file_upload(path,mime_type)
</code></pre><h1 id="测试response的content"><a href="#测试response的content" class="headerlink" title="测试response的content"></a>测试response的content</h1><p> 使用强大的assert_select</p>
<pre><code>assert_select "title", "TEST"
</code></pre>
<h1 id="控制器的功能测试"><a href="#控制器的功能测试" class="headerlink" title="控制器的功能测试"></a>控制器的功能测试</h1><pre><code>require File.dirname(__FILE__) + &apos
对于vim命令的一些总结
http://yoursite.com/2013/03/05/2013-03-05-about-vim/
2013-03-05T03:00:00.000Z
2015-05-09T10:58:22.000Z
<p>#宏命令(Macros)</p>
<p>高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的:</p>
<pre><code>:qx 开始记录宏,并将结果存入寄存器x
q 退出记录模式
@x 播放记录在x寄存器中的宏命令
</code></pre><p>稍微解释一下,当在normal模式下输入:qx后,你对文本的所有编辑动作将会被记录下来,再次输入q即退出了记录模式,然后输入@x对刚才记录 下来的命令进行重复,此命令后可跟数字,表示要重复多少次,比如@x20,可以重复20次。这个在文本的批处理中是非常有用的。</p>
<p>#同时编辑多个文件</p>
<p>在vim众多的插件中,有一个叫minibuffer的插件,就是下面所说的标签页功能了,可以支持同时编辑多个文件。</p>
<p>#标签命令</p>
<pre><code>:tabe fn 在一个新的标签页中编辑文件fn
gt 切换到下一个标签页
gT 切换到上一个标签页
:tabr 切换到第一个标签页
:tabl 切换到最后一个标签页
:tabm [N] 把当前tab移动到第N个tab之后
</code></pre><p>对,正如你所想象的那样,跟eclipse, ue等的标签页是一个意思!</p>
<p>#窗口命令</p>
<pre><code>ctrl+w s 水平分割窗口
ctrl+w w 切换窗口
ctrl+w q 退出当前窗口(由于同时有多个文件,此命令不会影响其他窗口)
ctrl+w v 垂直分割窗口
</code></pre><p>其他</p>
<p>vim在保存之前不会对文件做实际的修改,只是加载到缓冲区中,对文件的编辑其实是对缓冲区的编辑,直到:w时才会存入物理文件。</p>
<pre><code>:e file 把file加载到新的缓冲区中
:bn 跳转到下一个缓冲区
:bd 删除缓冲区(关闭文件)
:sp fn 分割窗口,并将fn加载到新的窗口中
</code></pre><p>#退出编辑器</p>
<pre><code>:w 将缓冲区写入文件,即保存修改
:wq 保存修改并退出
:x 保存修改并退出
:q 退出,如果对缓冲区进行过修改,则会提示
:q! 强制退出,放弃修改
</code></pre><p>#查找替换</p>
<pre><code>/pattern 向后搜索字符串pattern
?pattern 向前搜索字符串pattern
n 下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个)
N 上一个匹配(同上)
:%s/old/new/g 搜索整个文件,将所有的old替换为new
:%s/old/new/gc 搜索整个文件,将所有的old替换为new,每次都要你确认是否替换
复制粘贴
dd 删除光标所在行
dw 删除一个字(word)
x 删除当前字符
X 删除前一个字符
D 删除到行末
yy 复制一行,此命令前可跟数字,标识复制多行,如6yy,表示从当前行开始复制6行
yw 复制一个字
y$ 复制到行末
p 粘贴粘贴板的内容到当前行的下面
P 粘贴粘贴板的内容到当前行的上面
]p 有缩进的粘贴,vim会自动调节代码的缩进
"a 将内容放入/存入a寄存器,可以支持多粘贴板
</code></pre><p>附:比如常用的一个寄存器就是系统寄存器,名称为+,所以从系统粘贴板粘贴到vim中的命令为”+p,注意此处的+不表示操作符,二十一个寄存器。</p>
<p>#移动光标</p>
<p>在vim中移动光标跟其他的编辑器中有很大的区别,不过一旦学会了,就会飞速的在文本中移动了。</p>
<pre><code>h,j,k,l 上,下,左,右
ctrl-f 上翻一页
ctrl-b 下翻一页
% 跳到与当前括号匹配的括号处,如当前在{,则跳转到与之匹配的}处
w 跳到下一个字首,按标点或单词分割
W 跳到下一个字首,长跳,如end-of-line被认为是一个字
e 跳到下一个字尾
E 跳到下一个字尾,长跳
b 跳到上一个字
B 跳到上一个字,长跳
0 跳至行首,不管有无缩进,就是跳到第0个字符
^ 跳至行首的第一个字符
$ 跳至行尾
gg 跳至文件的第一行
gd 跳至当前光标所在的变量的声明处
[N]G 跳到第N行,如0G,就等价于gg,100G就是第100行
fx 在当前行中找x字符,找到了就跳转至
; 重复上一个f命令,而不用重复的输入fx
tx 与fx类似,但是只是跳转到x的前一个字符处
Fx 跟fx的方向相反
),( 跳转到上/下一个语句
* 查找光标所在处的单词,向下查找
# 查找光标所在处的单词,向上查找
`. 跳转至上次编辑位置
</code></pre><p>#在屏幕上移动</p>
<pre><code>H 移动光标到当前屏幕上最上边的一行
M 移动光标到当前屏幕上中间的一行
L 移动光标到当前屏幕上最下边的一行
</code></pre><p>#书签</p>
<p>ma 把当前位置存成标签a</p>
<p>`a 跳转到标签a处</p>
<p> 编辑</p>
<pre><code>r 替换一个字符
J 将下一行和当前行连接为一行
cc 删除当前行并进入编辑模式
cw 删除当前字,并进入编辑模式
c$ 擦除从当前位置至行末的内容,并进入编辑模式
s 删除当前字符并进入编辑模式
S 删除光标所在行并进入编辑模式
xp 交换当前字符和下一个字符
u 撤销
ctrl+r 重做
. 重复上一个编辑命令
~ 切换大小写,当前字符
g~iw 切换当前字的大小写
gUiw 将当前字变成大写
guiw 将当前字变成小写
>> 将当前行右移一个单位
<< 将当前行左移一个单位(一个tab符)
== 自动缩进当前行
</code></pre><p>#插入模式</p>
<pre><code>i 从当前光标处进入插入模式
I 进入插入模式,并置光标于行首
a 追加模式,置光标于当前光标之后
A 追加模式,置光标于行末
o 在当前行之下新加一行,并进入插入模式
O 在当前行之上新加一行,并进入插入模式
</code></pre><p>Esc 退出插入模式</p>
<p>#可视模式</p>
<p>标记文本</p>
<pre><code>v 进入可视模式,单字符模式
V 进入可视模式,行模式
ctrl+v 进入可视模式,列模式,类似于UE的列模式
o 跳转光标到选中块的另一个端点
U 将选中块中的内容转成大写
O 跳转光标到块的另一个端点
aw 选中一个字
ab 选中括号中的所有内容,包括括号本身
aB 选中{}括号中的所有内容
ib 选中括号中的内容,不含括号
iB 选中{}中的内容,不含{}
</code></pre><p>对标记进行动作</p>
<pre><code>> 块右移
< 块左移
y 复制块
d 删除块
~ 切换块中内容的大小写
</code></pre>
<p>#宏命令(Macros)</p>
<p>高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的:</p>
<pre><code>:qx 开始记录宏,并将结果存入寄存器x
q 退出记录模式
@x 播放记录在x寄存器中的宏命令
about vm
http://yoursite.com/2013/03/04/2013-03-04-about-vm/
2013-03-04T08:21:00.000Z
2015-05-09T10:58:22.000Z
<h2 id="VM设定时遇到的网络问题"><a href="#VM设定时遇到的网络问题" class="headerlink" title="VM设定时遇到的网络问题"></a>VM设定时遇到的网络问题</h2><hr>
<ol>
<li><p>虚拟机不能上网 桥接方式</p>
<pre><code>桥接方式解决。注意设置windows下的网络链接,要将桥接的checkbox选上
</code></pre></li>
<li><p>window下的putty不能连接到虚拟机上,网址也不能访问</p>
<pre><code>网址不能访问是linux下的防火墙没有关闭
service iptables stop 注意要用root权限关闭,不然不起作用
putty连不上的原因,是因为没有安装openssh
yum -y install openssh-client openssh-server
安装完毕后发现还是不能连接,原因是ssh服务还需要手动启动
service sshd start
</code></pre></li>
</ol>
<h2 id="VM设定时遇到的网络问题"><a href="#VM设定时遇到的网络问题" class="headerlink" title="VM设定时遇到的网络问题"></a>VM设定时遇到的网络问题</h2><hr>
<ol>
<li><p>虚拟机不能上网 桥接方式</p
centos下搭rails开发环境时的一些记录
http://yoursite.com/2013/03/04/2013-03-04-new-post/
2013-03-04T07:42:00.000Z
2015-05-09T10:58:22.000Z
<p>安装mysql</p>
<pre><code>yum -y install mysql
</code></pre><p>配置文件-设置编码为utf8</p>
<pre><code>vim /etc/my.cnf
[mysql]
default-character-set = utf8
</code></pre><p>启动mysql服务</p>
<pre><code>/etc/rc.d/init.d/msyqld start
</code></pre><p>设置mysql随机启动</p>
<pre><code>chkconfig mysqld on
chkconfig --liset mysqld
</code></pre><p>创建数据库</p>
<pre><code>msyqladmin -u root create depot_development
</code></pre><p>修改root用户的密码</p>
<pre><code>update user set password = password('root') where user = 'root'
/etc/init.d/mysqld restart
mysql -uroot -p
</code></pre><p>创建rails项目</p>
<pre><code>rails new depot --database=mysql
</code></pre><p>出现错误</p>
<pre><code>mysql.h is missing.
</code></pre><p>解决办法:<br> yum -y install mysql-devel</p>
<p>mysql 查看表结构</p>
<pre><code>desc 表名
</code></pre>
<p>安装mysql</p>
<pre><code>yum -y install mysql
</code></pre><p>配置文件-设置编码为utf8</p>
<pre><code>vim /etc/my.cnf
[mysql]
default-character-set