Wen

How to make custom error pages for 404, 500 in Rails?

使用自己的路由規則

# config/application.rb
config.exceptions_app = self.routes  

設定路由

# config/routes.rb
if Rails.env.production?  
    get "/404" => "errors#not_found", :as => "not_found"
    get "/500" => "errors#internal_error", :as => "internal_error"
  end

新增 controller

# app/controllers/errors_controller.rb
class ErrorsController < ApplicationController  
  def

About Using Searchkick

Searchkick 是很強大的搜尋 gem,使用的引擎為 elasticsearch,他的幾個附加功能,像是

都非常實用且易於整合,很值得參考利用。

跳過安裝的步驟,底下僅快速提到一些基礎的經驗

問答

Q: 當新增資料時,searchkick 會自動 reindex 嗎?
A: 會,預設情況 index 會與資料庫同步

# 如果要更好的效能,可以使用背景程序
class Product < ActiveRecord::Base  
  searchkick callbacks: :async
end  

Q: 能夠使用自己建立的同義字詞庫嗎?
A: 可以

class Product < ActiveRecord::Base  
  searchkick

Dead Simple Easy Copy to Clipboard

為使用者將網頁上的某些字串複製到剪貼簿,應該值得很簡短的實作方式:

$('.share-link').click(function(){
  copyToClipboard($(this));
});

函式長這樣

function copyToClipboard(element) {  
  var $temp = $j("<input>");
  $j("body").append($temp);
  $temp.val(element.attr('data-link')).select();
  document.execCommand("copy");
  $temp.remove();
}

若加上完畢後的提示訊息,比如 複製成功 的訊息泡泡在元件的附近就堪稱完美了。

參考出處:stackoverflow

Can't Remove or Reset Gemfile.lock from Git

bundle install 後有時候會發生 commit 的 Gemfile.lock 和實際運作主機上的 Gemfile.lock 不同的問題

令人困擾的是,用 git resetgit checkout -- Gemfile.lock 並不能解決這問題,Gemfile.lock 就像是會重生一般,怎麼刪除它或重設它也沒有反應。

不過還好終於找到解法,原來是 spring 搞的鬼。

在命令列下使用 spring stop 後,再 git checkout -- Gemfile.lock 即可。

原始解釋:

This happened to me and git reset

Set Up Ubuntu Bash Shell & Development Environment in Windows 10

Windows 10 引進了 Ubuntu 16.04 bash shell,終於可以擺脫 VMWare、不用再忍受低效能又狂吃記憶體的苦痛了。

底下是我安裝與建置 Ruby on Rails 開發環境的步驟,目前體驗起來非常的好!運作也都很正常,提供給網友們參考~


安裝 Ubuntu bash shell

首先要在 Windows 10 裡安裝原生的 Ubuntu bash shell

安裝完成後,如果你不知道 Windows 10 為你安裝的 Ubuntu 版本的話,可以在 console 輸入

> lsb_release -a
# response
No LSB modules are available.

Practice to Integrate Neo4j & Rails

底下我們會走過一遍所有在 rails 裡應該有的設定,最後做出一個能擁有 Neo4j ActiveNode 的 Model,並且透過 rails console 建立節點(就像是操作 active record 一樣簡單)。

在那之前如果還沒有安裝 Neo4j,可以參考這篇文章先把它安裝起來 (in Ubuntu)。

Setup

Let's start by creating a new rails app

> rails new neoapp
> cd neoapp

In your Gemfile

# Gemfile
gem 'neo4j', '~> 8.1.0'

Setup of Neo4j in Ubuntu 16.04

底下的腳本可供安裝使用

cd ~  
wget -O - http://debian.neo4j.org/neotechnology.gpg.key >> key.pgp  
sudo apt-key add key.pgp  
echo 'deb http://debian.neo4j.org/repo stable/' | sudo tee -a /etc/apt/sources.list.d/neo4j.list > /dev/null  
sudo apt-get update && sudo apt-get

Use Shoryuken as a Background Job Processor in AWS Instead of Sidekiq

shoryuken 實在是個很帥的名字,如果你有玩過快打旋風的話,你就會知道它其實是昇龍拳的意思。

它的厲害之處就是使用了 AWS 的 SQS 作為佇列系統,可與 rails active job 結合使用,使用語法也和 sidekiq 非常接近,熟悉 sidekiq 的話肯定也會對 shoryuken 有好感。

雖然少了漂亮的介面可觀看,但是若要實作分散式的任務處理系統,面對多台主機的協同作業,AWS SQS 便會是比較好的選擇(相較於主機裡的 redis)。

讓我們開始吧!

安裝

所有你需要的 shoryuken 參數

# config/shoryuken.yml
aws:  
  access_key_id:      <%= ENV['AWS_ACCESS_KEY_ID'] %>
  secret_

Switch from Rufus-scheduler to Whenever

之前經常使用 Rufus-scheduler 做系統的排程,然而最近一個專案在設定時,不知道是因為跟 passenger 不合還是怎麼,在 production 環境就是無法如預期的執行。

幾經思考,決定改用 Whenever,順利成功。

安裝

in Gemfile

gem 'whenever', :require => false  

記得到目錄下

$ cd /apps/my-great-project
$ wheneverize .

會生成一個 config/schedule.rb 檔案。利用這個檔案寫作你需要的自動排程。

範例

every 3.hours do # 1.minute 1.day 1.week 1.month 1.year is also