記事

CentOS6でhttpsに接続するとSSL Connection Errorされる件

環境

症状

要はSSLが問題なので、httpsのサイトならなんでもよくて、例えば

curl https://twitter.com

ってやると通常はtwitterのソースが表示されるが、

SSL Connection Error

ってでる。おかげでyum updateやbundle installもできない

原因

curl のバージョンが古い

yum update curl 
$ curl -V
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

が、アップデートしても症状は改善しない。なんやねん

どうもnssが原因らしい nssはNetwork Security Servicesの略でそういうライブラリ群とのこと

yum update nss

これでいけた

結論

定期的にyum updateしましょうね

ActionCable使ったRailsのnginx設定

ActionCableはwebsocketを使うので通常のRailsと設定が違う

環境

  • Rails 5.0.3
  • puma
  • Redisは今回使わない

nginx

upstream puma-realtime {
  server unix:///var/www/realtime/shared/tmp/sockets/puma.sock;
}

server {
  listen 80;
  server_name hogehoge.com;
  root /var/www/realtime/current/public;
  client_max_body_size 0;

  location / {
    try_files $uri @proxy;
  }

  location /cable {
    proxy_pass http://puma-realtime;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
  }

  location @proxy {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://puma-realtime;
  }
}

もう一つコケる要素があって、developでは勝手にルーティングしてくれるけど、production環境では明示的にwebsocketのルーティングを示さなければならない。

config/routes.rb

mount ActionCable.server => '/cable'

その他設定項目

config/environments/production.rb

ActionCable.server.config.disable_request_forgery_protection = true
config.web_console.whitelisted_ips = '0.0.0.0/0'

config/cable.yml

productionの項目を adapter: asyncにしても動作した

development:
  adapter: async

test:
  adapter: async

production:
  adapter: redis
  url: redis://localhost:6379/1

javascriptでGETパラメータを整形するときはURLSearchParams

※ レガシーブラウザの対応を除く

この記事で終了、ってなっちゃうけど。

qiita.com

試してみる

let url = new URL('http://thr3a.hatenablog.com/search?q=rails&order=date');
let params = new URLSearchParams(url.search.slice(1));

params.get('q')
// => "rails"

params.has('q')
//  => true

params.set('order', 'popular')

params.getAll('q')
//  => ["rails"]

params.append('hoge', 114514)

params.delete('q');

params.toString();
// => 'order=popular&hoge=114514'

で、対応ブラウザは?

そもそも最近でたAPIだから少ない IEは全滅

http://caniuse.com/#search=URLSearchParamscaniuse.com

ChromeとかFirefox等モダンブラウザ限定でIEなんか関係ないって場面ではどんどん使っていきたい

jQueryのanimate()が効かない

animate()とは

jQuery標準メソッドの1つで、要素を動かしたり、隠したり色々できるスグレモノ

http://api.jquery.com/animate/api.jquery.com

その中でも要素の背景色を別の色にフェードさせながら変えたいと思った。

<div id="mybox" style="width:300px;height:300px"></div>

<script>
$('#mybox').animate({backgroundColor: '#ffd700'}, 'slow');
</script>

が、動かない、、、エラーも出ないし

原因

jQueryに加えてライブラリの追加が必要

jquery color pluginとかでググれば出てくる

オリジナル?のURLはドメイン切れてたのでgihhubにあがってるJSを使う

github.com

このなかのhttp://code.jquery.com/color/jquery.color-2.1.2.min.jsをインクルードすればおk

Railsの再起動のしかた(puma版)

Capistrano経由で操作する場合

一番楽ではある

bundle exec cap staging puma:start
bundle exec cap staging puma:stop
bundle exec cap staging puma:restart

サーバーから操作する場合

すべて/var/www/ul_portal/currentのようにcurrentディレクトリでの操作とする

起動

bundle exec puma -C /var/www/ul_portal/shared/puma.rb --daemon

-Cに渡すファイルはconfig/puma.rbでは無理なので注意

停止

bundle exec pumactl -S /var/www/ul_portal/shared/tmp/pids/puma.state stop

正直単にプロセス殺すだけならkillコマンドのほうが速いかも

備考

  • コマンドではbundle exec pumactl -S /var/www/ul_portal/shared/tmp/pids/puma.state restart が一番楽だけど、pumaが生きているときにしか使えないので結構厄介
  • pumactlコマンドはpumaコマンドと違ってdaemon指定ができないのでpumactlでデーモン起動したい場合はpuma.rbに設定を追記する必要がある