americandog1993の日記

プログラマー歴半年のメモ

ドットインストールの「さくらのVPS入門」の手順通りに進めたらハマったのでメモ

どこでハマるのか

さくらのVPSはCentOS7も選択できるが、講座の環境に合わせるためCentOS6で進めていった。
#08-#09 SSHの設定をしよう で鍵設定を行い、鍵ログインを試すところでrefuseされる。

解決策

#10 ファイアウォールの設定をしよう まで済ませると鍵ログインできるようになる。

refuseされる原因

おそらくだが、sshdconfigとiptablesのポート設定が不一致だったことが原因。
なので、sshdconfigだけ変更した段階ではうまくいかない。
同じ箇所でハマった人は、iptablesまで済ませてからログインを試すことを勧める。

講座で使われているCentOSバージョンは6.3とある。
現在ではCentOS6をインストールするとバージョンは6.9である。
講座公開時は問題なかったのかもしれない。

CentOSのcronで定期作業を自動で行わせる

環境

さくらのVPS CentOS6

動機

railsアプリケーションを作ってて自動メンテに挑戦してみたいと思ったため。
毎度ながら素人の自分でもできる超簡単な方法を採ったので、たぶんもっとセキュアでいい方法はあると思う。

やったこと

Webアプリ側

自作のチャットアプリで1分毎に「test」と自動投稿させてみる。
rails側でこういうアクションを書く。

def create_test_comment
   Comment.create(content: 'test')
end

ルーティングでアプリURL/testにアクセスすれば上のアクションが実行されるよう設定。

CentOS

$ crontab -u [ユーザ名] -e

エディタが起動されるので、

*/1 * * * * curl http://example.com/test

と入力して保存。
あとは自動実行をわくわくして見守る。

f:id:americandog1993:20170716071758p:plain

うまくいってることを確認。
同じ要領で「テーブルのレコードが◯件を超えた分を削除」とか定期実行させられそう。

Bootstrapサイトをスマホ対応させる

勝手にいい感じにレスポンシブデザインにしてくれるという触れ込みのBootstrap。
でもなぜかスマホでPCレイアウト表示される時。

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

headタグの中にこいつを入れる。

参考
【CSS】スマホで Media Queries が効かないときの対処法 - Qiita

Cloud9でrails serverできない

こんなん出た。

$ rails s -b $IP -p $PORT
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://0.0.0.0:8080
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.4.0 (ruby 2.3.0-p0), codename: Owl Bowl Brawl
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:8080
Exiting
/usr/local/rvm/gems/ruby-2.3.0/gems/puma-3.4.0/lib/puma/binder.rb:255:in `initialize': Address already in use - bind(2) for "0.0.0.0" 

再起動したら直った。

Cloud9 再起動する方法

Cloud9でOSの調子が悪くて再起動したい時のメモ。
画面右上のこれをクリック。

f:id:americandog1993:20170429144908p:plain

↑これ。

クリックするとなんかシュッと出てくる。

f:id:americandog1993:20170429145018p:plain

右下のRestartをクリック。
ちょっと待って完了。

SAMインターフェースのメソッドは一つだけ

SAMインターフェースは一個のメソッドしか定義できない。

interface MyFunction {
  int call(int x);
}

インターフェース型変数にメソッド参照を入れるの慣れない。
直感的に捉えられる日は来るのだろうか。

参考:
【Java】Java8のあれこれ③ 関数型インターフェース(1) | Ardito Tech Blog

Ruby ハッシュのデフォルト値

ハッシュの存在しないキーのデフォルト値について。

exampleA = {}
p exampleA[:foo] # -> nil

exampleB = Array.new
p exampleB[:foo] # -> nil

exampleC = Array.new(0)
p exampleC[:foo] # -> 0

newした時の引数にデフォルト値を設定できる。
何もしなければnil
普通にexample = {}で宣言した時にデフォルト値を渡す方法はあるんだろうか・・・

参考:
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう