読者です 読者をやめる 読者になる 読者になる

hotoolong's blog

Railsやvimや気になったことを綴ってます

rails server の 引数備忘録

Rails

気づけばもう3月ひな祭りですね。

デバックのため、ステージングのサーバを手で上げたくなったときに引数がわからなくなったので ほぼドキュメントなのですが、備忘録として残しておきます。

rbenv exec bundle exec rails s -e staging -p 8080

みたいにして起動することがたまにあるので、
起動スクリプトでポート確認したりして、置き換えて起動、デバッグなどで重宝しますね。

オプション 説明
-p ポート番号
-b バインドするIPアドレス
-c rackupファイルを指定
-d デーモン起動
-u デバックモード
-e 環境(test/development/production)を指定
-P PIDファイルパス
-h ヘルプを表示

railsコマンド(rails) - - Railsドキュメント

多段sshで踏み台サーバのドメインが同一の場合のssh confの書き方

本題通りですが、 特定のドメインへのsshを踏み台サーバ経由が必要になった場合 毎回踏み台サーバにsshするのは嫌気が差すのでsshconfigにまとめて記載する方法になります。 以下のように 踏み台サーバをHostに別名をつけてあげて踏み台の先のサーバのドメインをまとめて記載できるのでサーバが増えたときにも楽にsshすることができるようになります。

Host proxy
  HostName proxy001.hogehoge.com

Host *.hogehoge.com
  ProxyCommand ssh proxy -W %h:%p

Mac でスクリーンショットを撮る方法

Mac

タイトルそのままなのだけど、よく忘れる。
全然定着しないので備忘録。

画面全体が shift + command (⌘) + 3
選択部分が shift + command (⌘) + 4

support.apple.com

GoogleスプレットシートにGoogleアナリティクスのリアルタイムアクティブユーザー数を日別シートに書き出す

SpreadSheets Analytics

最近までちゃんとスプレットシートを活用してなかったのですが 、APIで呼び出しできるとアプリ同士で連携すると結構色々できて便利ですね。

まずはリアルタイムアクティブユーザーを取得するためのスプレットシートを作成します。  

メニューから ツール > スクリプトエディタ を選択
スクリプトエディタを立ち上げます。

メニューのリソース > Googleの拡張サービス を選択します。

以下のようにAnalyticsをONにしてその下のGoogleディベロッパーコンソールのリンクからAPIを有効にしておきます。
f:id:hotoolong:20170208013736p:plain

設定が完了したら空のスクリプト myFunctionがありますが、 以下のようにスクリプトを作成してみます。

view_idにはアナリティクスから取得します。
アナリティクスの管理 > ビュー設定にある ビューIDを設定します。

var view_id = 'xxxxxxxxx';

// 日付シートを取得なければ作る
function getSheet() {
  if (getSheet.cache) { return getSheet.cache; }
  var today = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd");
  getSheet.cache = SpreadsheetApp.getActive().getSheetByName(today);
  if (!getSheet.cache) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.insertSheet(today, 0);
    getSheet.cache = ss.getSheetByName(today);
  }
  return getSheet.cache;
}

function myFunction() {
  var activeUserCount = Analytics.Data.Realtime.get('ga:' + view_id, 'rt:activeUsers').getRows() || 0;
  var yyyymmddhhmmss = Utilities.formatDate(new Date(), "JST", " yyyy/MM/dd HH:mm:ss ");
  var sheet = getSheet();
  var last = sheet.getLastRow();
  // 最後の行の次に出力
  sheet.getRange(last + 1, 1).setValue(yyyymmddhhmmss);
  sheet.getRange(last + 1, 2).setValue(activeUserCount);
}

次に関数を選択でmyFunctionを選択して▶ の実行ボタンを押します。
スプレットシートに戻って、日付、アクティブユーザー数が表示されていればOKです。
最後にトリガーの設定です。スクリプトエディタに戻ってもらって時計のマークの 現在のプロジェクトのトリガーからトリガーを設定します。
myFunctionを1分ごと実行するには以下のように設定すればOKです。 f:id:hotoolong:20170208015110p:plain

これで1分ごとのアクティブユーザー数を取得できます。
今回のスクリプトは1日ごとにシートを作る用になっているので日別の管理はやりやすいかと思います。
スクリプト自体はjsでできているのでファイル名を日から月などに変更することでいろいろ使いやすく加工することもできるので便利ですね。

「⌘英かな」でキー設定をカスタマイズ

Mac Keybord

USキーボードを使っていると
英数、ひらがなの変換がキー配置になくて少し苦労しますね。
Ctr-Spaceでも切り替えることができるのですが、 少しタイムラグがあって作業が中断してしまいます。

Karabiner というソフトがあったのですがmacOS Sierra になってサポートが外れてしまい開発中となっています。
Karabiner - OS X用のソフトウェア

そこで
⌘英かな
です。

⌘英かな

現在のバージョンが2.2.0で 左右のcommandキーにキーバインドするだけでなく他に変更したいキーがあれば設定できる状態です。

KeyRmapの設定画面で 右下の+ で設定したい項目を追加できます。

私の場合はHHKBも使っていてノートMacとdeleteのキー配置が違うので
「delete」と「\」を入れ替えておきたいなと思って設定していたのですが
しばらく「\」を連打しているとcommandキーで英かなの変換ができなくなってしまい 何度か試してるのですが、おかしくなってしまうようです。
何かバグを踏んでいそうです。
バージョンが上がったらまた試してみたいです。

あとfnはinputに設定できるのですが、outputに登録できないないので
どこかで設定できるようになったら快適なキーボードライフを送れそうです。 バージョンアップを期待してます。

iTerm2越しにコマンドラインの単語で戻る進むのショートカットを追加する

Mac iTerm

新しいMacを構築中です。
気づいたことをメモっておこうかと思っています。

bashなどのコマンドラインでEsc+f Esc+b で単語移動できますが、 押しづらいのでiTerm2で接続するときに Command+f と Command+b に置き換えています。

iTerm2のPreferences > Keys の Key Mapings の下の + を押して
追加する項目を設定します。

Keyboard Shortcut で Command+f を押して Actionで Send Escape Sequenceを選択して Esc+fなどに設定すればOKです。
他にも設定可能なので見ておくといいかもしれないですね。

f:id:hotoolong:20170127011553p:plain

Accept: */*; で MissingTemplateになってしまうのを防ぐ

Rails

topページヘのアクセスでたまに変なExceptionが出てたのです。

ActionView::MissingTemplate (Missing template pages/top, application/top with {:locale=>[:ja], :formats=>["*/*;"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:

一見何がおかしいのかよくわからなかったですが、

HTTP Headerが Accept: /; で送られるとエラーになり Accept: / とセミコロンがない場合はhtmlのテンプレートが判断されて セミコロンがついてるとMissingTemplateになってしまうようです。

UAをみていると Baidu Browser のようですが、ExceptionがでてSlackなどに通知されてしまうのも何なので

ActionView::MissingTemplate (Missing template mall_front/pages/top, mall_front/application/top with {:locale=>[:ja], :formats=>["/;"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:

ApplicationController に以下のように設定すると防げました。

before_atcion :default_request_format

def default_request_format
  request.format = :html if request.format == '*/*;'
end

あんまり困っている人がいないのか、ググっててもあまり載ってないですね。