ブログめう

暇なときに何か喋ります

Node.jsのインストール(❌公式サイトpkg、❌homebrew)

Node.jsnodebrew を使ってインストール・バージョン管理しましょう。

もしnode.jsの公式サイトからインストーラーをDLしてnodeをインストールしちゃうと、後々面倒なことになります;

geniusium.hatenablog.com

もし brew install node でnodeをインストールしちゃうと、後々面倒なことになります;

geniusium.hatenablog.com

環境

インストール

node のバージョン管理ツール nodebrew を homebrew でインストール;

brew install nodebrew

nodebrew の初期設定;

# セットアップ
nodebrew setup

# パスの追加
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

インストール可能な node のバージョンを調べる;

nodebrew ls-remote

今回は、最新版の v15.9.0 をインストールする;

nodebrew install v15.9.0

v15.9.0 を使うようにする

nodebrew set v15.9.0

nodenpm のバージョン確認;

% node -v
v15.9.0

% npm -v
7.5.3

参考

qiita.com

qiita.com

【homebrew】Warning: You have unlinked kegs in your Cellar.

brew doctor したら brew link node しろと怒られるが、それができない。

前提

  • 公式サイトからNode.jsをインストールした
  • brewでも node をインストールしている(yarn の依存パッケージとして)
  • nodenodebrew で管理したい(している)

結論

  1. pkgでインストールした node.js を削除
  2. brew uninstall node
  3. npm install --global yarn

症状と挑戦

brew doctor

お医者さんによると以下のような感じ;

% brew doctor

略
Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected header files:
  /usr/local/include/node/略/略.h
  略(大量)

Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause formulae that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  node

brew link

brew link node をしてもパーミションエラー;

% brew link node
Linking /usr/local/Cellar/node/15.9.0... 
Error: Could not symlink include/node/common.gypi
/usr/local/include/node is not writable.

brew unlink node はエラーは出ないがなんの効果もない。

brew reinstall node

brew管理のnodeを再インストールしてみる;

% brew reinstall node
略
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink include/node/common.gypi
/usr/local/include/node is not writable.

You can try again using:
  brew link node
Warning: The post-install step did not complete successfully
You can try again using:
  brew postinstall node
==> Summary
🍺  /usr/local/Cellar/node/15.9.0: 3,390 files, 56.1MB

brew postinstall

じゃあということでポストインストールしてみる;

 % brew postinstall node
==> Postinstalling node
Warning: The post-install step did not complete successfully
You can try again using:
  brew postinstall node

sudo brew

sudo をつけて brew linkbrew postinstall をしてもだめ。

pkgのnodeをアンインストール

以下の記事を参考に、公式サイトからインストールしたnodeを完全に削除してみる;

geniusium.hatenablog.com

pkgでインストールしたnodeを削除してもダメ。 でも、エラーメッセージが少し変わった;

% brew link node
Linking /usr/local/Cellar/node/15.9.0... 
Error: Could not symlink share/systemtap/tapset/node.stp
/usr/local/share/systemtap/tapset is not writable.

解決?

まあ、パーミッションエラーということなので、そのディレクトリに権限付与すればいいだけではある;

sudo chown -R $USER /usr/local/share/systemtap/tapset

すると、エラーは出ない;

% brew link node                                       
Linking /usr/local/Cellar/node/15.9.0... 7 symlinks created.

brew doctor でも該当の警告は消えた。

真の解決法

いや、なんで手動で権限与えなきゃあかんねん。

めんどい、というかどう考えてもbrewの不具合、バグ。

そもそも nodenodebrew で別に管理しているのに yarn のためにそれとは別に node をインストールしなきゃいけないのはおかしい。

yarn インストール時に node はインストールしないような設定があるが、バグでうまくいかないらしい。

yarn を普通にインストールしてから、依存関係無視して node だけアンインストールすればいいらしいが、いや、だからめんどいて。

そして導き出されるたった一つの真実とは、、、そもそも brewyarn をインストールするのをやめる!!!

はい;

brew uninstall yarn
brew uninstall node

これで brew doctor で該当の警告は消えます。

yarn のインストール

npm でインストール;

npm install --global yarn

確認;

% yarn -v
1.22.10

npm list -g でも確認できます。

おしまい。

brewはちょいちょい面倒なことが起こるのであまり過信してはいけない。

参考

classic.yarnpkg.com

これはよくないという方法;

qiita.com

公式サイトからインストールしたNode.jsを完全に削除する

過ち

情弱すぎて害悪公式サイトからNode.jsをインストールしちゃった;;

全部消して、brew なり nodebrew なりでインストールしなおそう!!

環境

  • mac bigsur
  • インストールしたpkgの node.js と npm のバージョン:

f:id:geniusium:20210224025207p:plain

消す!!!

結局、消すべきファイルやディレクトリは以下の通りです;

# node
sudo rm     /usr/local/bin/node
sudo rm -rf /usr/local/include/node/
sudo rm     /usr/local/lib/dtrace/node.d
sudo rm -rf /usr/local/share/doc/
sudo rm     /usr/local/share/man/man1/node.1
sudo rm     /usr/local/share/systemtap/tapset/node.stp

# npm
sudo rm     /usr/local/bin/npm
sudo rm -rf /usr/local/lib/node_modules/
sudo rm -rf /Users/$USER/.npm

# あとこれも
sudo rm     /var/db/receipts/org.nodejs.*

消し残しがあったら教えてください;;

補足

下記の bom ファイル?にインストールされたファイルが書かれているらしい

/var/db/receipts/org.nodejs.node.pkg.bom
/var/db/receipts/org.nodejs.npm.pkg.bom

cat で見ようとするとなんかやばくなるので lsbom コマンドで内容を見る;

lsbom -f -l -s -pf /var/db/receipts/org.nodejs.node.pkg.bom
lsbom -f -l -s -pf /var/db/receipts/org.nodejs.npm.pkg.bom

ここに大体のファイルは書いてあるが、以下の取りこぼしもあるっぽい;

/usr/local/bin/npm
/Users/$USER/.npm

あとは bom ファイル自身など

/var/db/receipts/org.nodejs.node.pkg.bom
/var/db/receipts/org.nodejs.npm.pkg.bom
/var/db/receipts/org.nodejs.node.pkg.plist
/var/db/receipts/org.nodejs.npm.pkg.plist

stack overflowに書いてあったのは全部確認したつもり。

このベストアンサーの回答は少しまずいので、この記事の最初に書いたやつか、以下の1行にまとめたコマンドを使うようにしてください;

sudo rm -rv /{usr/local/{bin/{node,npm},lib/{dtrace/node.d,node_modules},share/{doc,man/man1/node.1,systemtap/tapset/node.stp},include/node},Users/$USER/.npm,var/db/receipts/org.nodejs.*}

node の再インストール

nodenodebrew で管理するのがよさそうです。

nodebrew 自体は brew でインストールできます。

詳しくは以下の記事で;

aaa

参考

hacknote.jp

stackoverflow.com

Ignoring GEM because its extensions are not built.

brewでなんかメッセージが出る;

% brew -v
Ignoring eventmachine-1.2.7 because its extensions are not built. Try: gem pristine eventmachine --version 1.2.7
Ignoring ffi-1.11.1 because its extensions are not built. Try: gem pristine ffi --version 1.11.1
Ignoring http_parser.rb-0.6.0 because its extensions are not built. Try: gem pristine http_parser.rb --version 0.6.0
Ignoring sassc-2.2.1 because its extensions are not built. Try: gem pristine sassc --version 2.2.1
Homebrew 3.0.2
Homebrew/homebrew-core (git revision d2b25; last commit 2021-02-23)
Homebrew/homebrew-cask (git revision 12eb5; last commit 2021-02-23)

Tryをトライしても、出力に変わりがない。

rbenv global system でシステムの ruby に切り替えてTryをトライしてみると、パーミッションエラーが出る。

sudu をつけて gem pristine してもパーミッションエラーとなる。は?

仕方がないので、関係するgemをアンインストールすることにする;

gem uninstall eventmachine
gem uninstall ffi
gem uninstall http_parser.rb
gem uninstall sassc

別のgemが依存しているがイイか?と聞かれるが全部 y と回答。

すると、Ignoringなんたらはもう表示されなくなった;

% brew -v
Homebrew 3.0.2
Homebrew/homebrew-core (git revision d2b25; last commit 2021-02-23)
Homebrew/homebrew-cask (git revision 12eb5; last commit 2021-02-23)

rails s とかで特にエラー出たりしないし、まあこれでよかった?

参考

参考にならなかった;

stackoverflow.com

【Rails】ブラウザの再読み込みを自動化

キーワード: ブラウザ、自動更新、自動読み込み、オートリロード、ライブロード

railsで開発しているとき、ファイルに変更があるたびに手動でブラウザの更新ボタンを押さなきゃいけないのはダルいので、自動で再読み込みしてくれるようにした。

Browsersyncというnpmパッケージを利用します。

環境

インストール

Browsersyncのインストール;

npm install -g browser-sync

-g オプションはグローバルにインストールするということらしいです。

設定ファイルなしで実行

まずはサーバーを立てます;

rails server

次に、browser-sync を起動します;

browser-sync start --proxy localhost:3000 --files "app/assets/stylesheets/*.css.*","app/views/**/*.html.*","app/assets/javascripts/**/*.js.*"

引数で監視するファイルを指定しています。

以上で準備は完了です。 適当にviewファイルなどをエディタで編集して保存すると、ブラウザでページが自動的に再読み込みされます。

設定ファイルを作る

上記のコマンドを毎回打つのは大変なので、browser-sync の設定ファイルを作成します。

rails new で生成されたディレクトリ内で、次のコマンドを実行します;

browser-sync init

すると bs-config.js が生成されます。

それを開いて、下記の箇所を修正します;

module.exports = {
    // 略
    // "files": false,
    "files": [
        "app/assets/stylesheets/*.css.*",
        "app/views/**/*.html.*",
        "app/assets/javascripts/**/*.js.*"
    ],
    // 略
    // "proxy": false,
    "proxy": "localhost:3000", 
    //略
};

これで、さっきのコマンドの代わりに、以下のコマンドでも同じように働きます;

browser-sync start --config bs-config.js

もう少し楽をする

もう少し楽をしましょう。

rails new したときに生成された package.json に、以下のコマンドを追加します;

"scripts": {
  "start": "browser-sync start --config bs-config.js"
}

そうすれば、rails s した後に次のコマンドを実行するだけ良くなります;

npm run start

以上!

参考

qiita.com

techracho.bpsinc.jp

qiita.com

www.browsersync.io

npm install で permission denied

npm install <package> をすると、権限が無いとエラーが出る。

sudo を付ければ実行できるんだろうが、たかが npm installsudo が必要になる意味がわからん。

結局、node.jsの公式サイトからインストーラーをDLしてnodeをインストールしたのがよくなかった。

ということで、そのインストーラーは使わず、nodebrew を使って node をインストールし直す。

まずはアンインストール

下記記事を参考に、pkgでインストールした nodenpm を削除;

geniusium.hatenablog.com

次にインストール

下記記事を参考に、nodebrew を使って node をインストールする;

geniusium.hatenablog.com

おわりに

これで、sudo なしで npm install ができる。

以上。

参考

tech-for.com

【Rails】データベースを変更

環境

内容

何も考えずに rails new をするとデータベースは sqlite3 になるが、herokuではそれが使えないので後からデータベースを progresql に変更したいときがある。

Gemfiledb/database.yml を修正すればいいが手でやるのは馬鹿らしい。

例えば、データベースを progresql に変更するには、以下のコマンドを打てばいい;

rails db:system:change --to=postgresql
bundle install
rails db:create
rails db:migrate

とのことです。

参考

note.com