カッティングボード

カルマをカットしてます

scpで詰まったこと

 scpでごく当たり前のことで詰まったのでまとめ。

 新しくcentosの環境立ててそこにscpで普通にデータを送ろうとした。データを送る前に複数人使うし自分専用のユーザーを作ろうと思い作成した。しかしデータは全員使うものなのでルート直下にscpしようとしていた。

 scpでデータを送ろうとしたら権限がないと言われてしまい少し戸惑った。権限がないならsudoで実行してやろうとsudoでscpを実行したが同じエラーが出た。普通に考えればcentosの環境の自分のユーザーにルートの権限はないのだから当たり前のことだけど20分くらい詰まったのでまとめ。普通にルートにファイルを置く権限を持っているユーザーに向けてscpをやれば解決した。

Ruby on Railsのfile.readの挙動

 html側でfileをアップロードするinputフォームを作成し、それをサーバー側で中身を受け取ろうとしたときに詰まったのでそのまとめ。

      f = params[:target_file]
      if(params[:target_file].present?)
        @original_filename = f.original_filename    # ファイル名
        @content_type = f.content_type                # Content-Type
        @size = f.size                               # ファイルサイズ
        @read = f.read                               # ファイルの内容

      puts '----------------'
      puts f.size
      puts f.read
      puts '----------------'

 以上のようなコードを書いて受け取ったファイルのサイズと中身を表示しようとしていたが、puts f.readは何も出力されなかった。なぜ中身を受け取ることができないのか探したのですが、結果としてこのコードでファイルの中身を受け取ることができていました。file.readは2度実行すると2回目に実行された方はnullになってしまう仕様でした。一度readされるとシークがファイルの最後まで進んでしまうため、2度目に実行する前にf.rewindを実行してシークをファイルの始めの位置に戻してあげないと、ファイルがうまく受け取れていないように見えてしまいます。
 一度変数で受け取った値は、受け取った変数を出力して中身が入っているか確認することでこのようなことは避けられるんじゃないかなー。

Go言語触ってみた

 最近ちょっと話題になっているdockerに使われているGo言語を少し触ってみました。
 Go言語はGoogleの開発した言語らしい。Googleの最初の2文字をとってGo言語なのかな?

 とりあえず以下のチュートリアルをやりました。 gihyo.jp

 上のチュートリアルをやったときに詰まったところをまとめたいと思います。

 treeコマンドはmacにはデフォルトで入っていないので、macでファイル構造をチュートリアルと同じように確認したい場合は入れる必要があります。普通にbrewではいるのでbrew install treeをシェルで実行すれば使えるようになります。
 GOPATHを.bash_profileとかに登録するときにパスをpwdと書いて指定しています。しかしpwdと指定したところでエラーが出てしまったので、pwdを自分で絶対パスで指定するのが無難だと思います。

 詰まったのはその2点くらいです。一応、1章の内容を終わらせたのでリンクを貼っときます。 github.com

MySQLの予約語の話

 MySQLで少し困ったことのまとめ。

 合ってるはずのクエリでエラーを吐かれて困りました。SQLのエラーは少し分かりにくくて、だいたいこの辺がおかしい気がするなーくらいのニュアンスのエラーしか吐いてくれませんでした。

 まぁ最初のうちはクエリが間違ってるんだろうと色々確認してみたけどおかしなところが見当たらない。試しに作成しようとしているカラム名を変更してみたら通る。この時点でなんとなく予約語使っちゃってるんだろうなーと思って調べてみたら案の定でした。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.3 予約語

 予約語カラム名とかに使おうと思えば以下のリンクのように使えるらしいですが、まぁあんまり使わないほうがいいですよね。keyとかvaluesとかついカラム名に使いたくなっちゃうようなのもあるので頭の隅に置いておこうかな。

www.dbonline.jp

cakephp3でマルチテナントっぽいやつ

 cakephp3でデータベースを切り替える方法のマルチテナントを実装しようとしたときにかなり詰まったのでそれのまとめ。

 cakephp3のpluginとしてまとめられているマルチテナントは、ソースコード読む限りデータベース自体を切り替えたりする方法ではなく、マルチテナントIDみたいなのを作ってそれで絞ってからあれこれするやつっぽかった。それでやると、データベース自体が分かれているわけではないので別テナントの情報が混ざってしまうので良くない。

 アクセスするデータベースを切り替える方法をいろいろ探し回って、cakephp3のソースコード読もうとして読めなかったりした結果、普通にドキュメントに書いてありました。方法としてはテーブルオブジェクトの接続設定でどのコネクションを利用するかテーブルオブジェクトで設定します。まぁ適当にtenantとかにしとけばいいんじゃないかな。その後、データベースの基本の設定に書いてあるように、tenantコネクションをコントローラーで作成すれば、コントローラー側で動的にアクセスするデータベースを切り替えられるようになりました。

 

cakephp3のマルチテナントplugin

github.com