みそみそりんりんblog

勉強したことを書いていきます

UbuntuServerで、ファイルサーバ(NAS)立ち上げてみた

実行環境

経緯

やっぱり、サーバの勉強ついでにもなるし
プライベートなファイルを保存するのに、ファイルサーバ欲しいよな???

手順

アップデート(最新状態にする)

sudo apt update

アップグレードできるpackageがありますよと出たら、以下のコマンド実行

sudo apt upgrade

sambaのインストール(ファイルサーバーを実現するためのソフトウェア)

sudo apt install samba

sambaにユーザーを登録する(Ubuntuに登録されているアカウント)

sudo pdbedit -a [ユーザー名]

共有するディレクトリを作成

mkdir -p /home/ubuntu/share

アクセス権限設定

sudo chmod 0777 /home/ubuntu/share

sambaの設定

sudo vi /etc/samba/smb.conf

以下追記

[global]
  dos charset = CP932  # Windows側で利用されている文字コード指定
  unix charset = UTF-8  # UNIX上のファイルシステムに用いられている文字
  ...
  # 行の初めのセミコロンはずす
  # 自身のubuntuのIPアドレスを書き込む(ip adress showで見れる)
  interfaces = 192.168.XX.0/24 xxxx
  ...
  bind interfaces only = yes # 行の初めについていたセミコロンはずす
  map to guest = bad User  # 追記
  ...
[share] # 表示名 他のデバイスからアクセスする際に表示される
  path = /home/ubuntu/share
  writeable = yes
  guest ok = yes
  guest only = yes
  create mode = 0777
  directory mode = 0777

書き込み後

testparm

↑でsmb.confに誤りがないかチェック

sambaの実行

sudo systemctl restart smbd nmbd

↑smb.confの編集が反映される
sambaは、smbdとnmbdの2つのデーモンにより動いている
sbmd:クライアントにファイル共有と印刷サービスを提供するデーモン
nmbd:NetBIOSネームサービス(名前解決)とブラウジング機能を提供するデーモン

sudo systemctl enable smbd nmbd

Ubuntuの起動時に自動で実行される

これで、同じネットワーク内の他のデバイスなら
ファイルにアクセスできるようになる

iPhoneからアクセス

感想

次は、外部アクセスできるように、
設定できるようにしたいな
いっぱい画像保存するよ〜

参考文献

Ubuntu 20.04 でファイルサーバー(NAS)を作ろう! | Beightlyouch

users.miraclelinux.com

Rubyのメソッドの引数がHashの時、fetch使わんやつおる??

初期化の際の引数にハッシュを使う

「 | | 」を使った場合

def initialize(args)
  @id  = args[:id] || 1
  @name = args[:name] || "misomiso"
end

↑これだと、falseとnilの区別ができねえじゃねえか!

「fetch」を使うと...

def initialize(args)
  @id = args.fetch(:id, 1)
  @name = args.fetch(:name, "misomiso")
  @flag = args.fetch(:flag, true)
end

fetchでええやん

参考文献

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方 | Sandi Metz, 髙山泰基 | 工学 | Kindleストア | Amazon

rmagickの使い方まとめ

rmagic使い方

### ファイルを読み込む
image_data = Magick::Image.read(img.path).first

### ファイルのフォーマット(PNG, JPG etc...)
image_data.format

### ファイルのサイズ
image_data.filesize

疑問点

最初は↓

Magick::Image.from_blob(buffer).shift

でファイルを読み込んでいたのだが、 「ai」ファイルが「pdf」判定されていた
.readを使うことによってちゃんと判定してくれたよん
原因わかったら、書き足します

CentOS8 で ruby gem "rmagick" インストール

Linuxに"Image Magic" をインストール

$ yum install -y libwebp libwebp-devel

$ wget https://imagemagick.org/download/ImageMagick.tar.gz

$ tar zxvf ImageMagick.tar.gz

# makefileにルールが追加される
$ ./configure

# コンパイル
$ make

# コンパイルしたプログラムをインストール
$ sudo make install

"rmagic"をインストール

#  MagickCore.pcがあるディレクトリを環境変数に入れる
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

$ bundle install

感想

クソ時間かかったのでメモ

参考文献

RMagick をレンタルサーバーにインストールするのではまった | EasyRamble

ImageMagick – Install from Source

Amazon Linux 2 に ImageMagick をインストールする - Qiita

Sinatra layoutのネストについて

実行環境

問題

layoutを2重でネストさせたい

解決策

erb :"内側のlayout", :layout => :"外側のlayout" do
  erb :user(対象のview)
end

↑これでいけるわ
sinatraのREADME最強!

参考にしたサイト

sinatrarb.com

Rails:Ajaxを使用してリクエストを送った際、Unprocessable Entity 422 となってしまう件について

実行環境

問題

  • js(jQuery)のajaxでcreateアクション(users::books#create)にリクエストを飛ばすとUnprocessable Entity 422となってしまう。

  • Rails側のエラーを見てみると「ActionController::InvalidAuthenticityToken (Can't verify CSRF token authenticity.):」となっていた。

  • どうやら、CSRFトークン認証ができなかったという内容のエラーである。

対応策

解決策1 application_controller.rbを修正

protect_from_forgery with: :null_session

↑この変更により、CSRF対策が『例外の発生』から『セッションのクリア』になる。 『セッションのクリア」の場合、処理は継続されるためAPIのエンドポイントを叩いたら結果が返ってくるようになる。

解決策2 特定のcontrollerを修正

skip_before_action :verify_authenticity_token

↑を追加 影響範囲が限定的になる

参考にしたサイト

【Rails】 API開発で『Can't verify CSRF token authenticity』といわれたときの対応 - Qiita

知っておきたいクロスサイトリクエストフォージェリの仕組み | yamory Blog

RailsのCSRF保護を詳しく調べてみた(翻訳)|TechRacho by BPS株式会社

Rails 7.0.2 => Asset `application.js` was not declared to be precompiled in production. エラーについて

実行環境

問題

app/assets/javascripts/application.jsが読み込めない〜

対応策

Declare links to your assets in app/assets/config/manifest.js.
↑とエラー文にあったため

  //= link_directory ../javascripts .js

を記述

無事、app/assets/javascripts/下のjsファイルが読み込まれるようになりました

ちなみに、特定のViewに読み込ませる際には、

<%= javascript_include_tag "jsのファイル名" %>

↑を記述すればいい