メモ帳

メモとか備忘録とか

airで読み込むtomlファイルに異常があるときのエラー

goでairを使ったツールを開発していて、
久しぶりにコンテナを動かしたらエラーで立ち上がらなかったのでメモしておく。

以下が出てきたエラー。

  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ , built with Go 

2021/10/15 06:45:55 (3, 8): unescaped control character U+000A

エラー文を見て、真っ先に疑ったのはプログラムの改行コードだが、
問題があったのはairを実行する際に読み込むtomlファイルだった。

[build]
# Just plain old shell command. You could use `make` as well.
cmd = "statik -f -src=./lib/templates/php \
    && go build -o tmp/alpine/hoge ./main.go \
    && GOOS=darwin GOARCH=amd64 go build -o tmp/mac/hoge ./main.go \

bin = "tmp/alpine/hoge"
log = "air.log"

# Exclude specific regular expressions.
exclude_regex = ["_test.go"]

[color]
# Customize each part's color. If no color found, use the raw app log.
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"

cmd 代入箇所の最後(5行目)が、" で閉じてないわ \ が付いてるわで構文に問題があった。
下記エラーはtomlの構文エラーを解消するとクリアできる。

unescaped control character U+000A

docker-composeのアップデートについて

2系へアップデートをする際に、手が止まったのでメモ

古いバージョンを削除

# インストール場所を確認して
$ ls -l /usr/local/bin/docker-compose

# 移動して
$ cd /path/to/bin/docker-compose

# 削除する
$ sudo rm -rf docker-compose

新しいバージョンをインストール

下記に新しいバージョンがどんどん追加されている。

github.com

Assetsにあるファイルのリンクを確認

f:id:fksks:20211012172625p:plain
Assets

確認したリンクを使って 下記のcurlコマンドを叩いてダウンロードする。

$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-darwin-x86_64" -o /usr/local/bin/docker-compose

※ 下記のように unameコマンドを利用してダウンロードリンクを生成している例が出回っているが、

sudo curl -L "https://github.com/docker/compose/releases/download/1.x.x/docker-compose-(uname -s)-(uname -m)" -o /usr/local/bin/docker-compose

2系以降はダウンロードリンクで使われている、カーネル名の頭文字が小文字になっている。 unameコマンドは下記のように大文字で出力されるため、上記のcurlの結果はnot foundで失敗する。

$ echo (uname -s)
Darwin

今後元に戻るかもしれないけれど、
直接ダウンロードリンクを取りに行ったほうが早そう。

実行権限の負荷

ダウンロードしたバイナリが実行可能になるように権限を付加する

$ chmod +x /usr/local/bin/docker-compose

動作確認

$ docker-compose -v
Docker Compose version v2.0.1

FirebaseのSDKで設定ミスしたときのエラー

Firebase Authenticationでログイン機能を実装しようとして失敗したときのメモ。

FirebaseSDKのsignInWithPopup()を利用したところ、
コンソールに下記エラーを吐き出し、真っ白なままポップアップが閉じてしまいました。

Refused to display 'https://console.firebase.google.com/u/0/project/[PROJECT_NAME]/database/data/__/auth/iframe#id=I1_1234567891234&_gfid=I1_1234567891234&parent=https%3A%2F%2F[DOMAIN]&pfname=&rpctoken=12345678' in a frame because it set 'X-Frame-Options' to 'sameorigin'.

結論から言うと、原因は初期設定値のミスでした。
↓間違ってた設定↓

firebase.initializeApp({
  apiKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
  authDomain: '[APP_NAME].firebaseio.com',
  projectId: '[APP_NAME]'
})

↓正しい設定↓

firebase.initializeApp({
  apiKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
  authDomain: '[APP_NAME].firebaseapp.com',
  projectId: '[APP_NAME]'
})

firebaseio.com はRealtime Databaseの利用時に使われる設定です。
(というかエラーのURLちゃんと見ると、思いっきりDatabaseって書いてます
firebase.google.com

そんなものがiframeで使えるわけもなく、
X-Frame-Optionsのエラーが出ているんだと思います。

ちなみにコード上での設定内容は、Firebase側のconsoleでこんな感じに生成できちゃいます。
これをコピペするのが吉ですね。
f:id:fksks:20201208064250p:plain

今回はfirebase側のdomain許可設定が間違ってると思い、
めちゃくちゃ時間使っちゃいました。初期設定には気をつけましょう。

composer require global でインストールされたものの場所が分からない件

以下コマンドでcomposerの設定が見れます。
自分のvagrantの環境で試してみました。

$ composer config --list --global
[repositories.packagist.org.type] composer
[repositories.packagist.org.url] https?://packagist.org
[repositories.packagist.org.allow_ssl_downgrade] true
[process-timeout] 300
[use-include-path] false
[preferred-install] auto
[notify-on-install] true
~
~
[home] /home/vagrant/.config/composer

[home]に書いてあるパスが、composerにとってのまさしくhomeであり、 venderディレクトリに、インストールしたものが入っています。

Laravel5.5のルーティングでルート以外全部Not Found

VagrantでCentOS7の環境を新しく作って、
PHPやらApacheやらComposerやら色々導入して、Laravelで遊ぼうとしたときのこと。

とりあえず、http://<address>/<project_name>/public/ で初期画面見れてほっこり。

このとき、初期画面が見れるのは、routes/web.php
こんな感じでルーティングが設定されているからですよね。

Route::get('/', function () {
    return view('welcome');
});

ただ、今回起こったことは、
下みたいに、ルーティングを追加したときに Not Found が表示されました。 fugaだろうがfooだろうが全部 Not Found。

Route::get('/hoge', function () {
    return 'Hello World';
});

/ でルーティングしたものは表示されてそれ以外はNot foundなもんで、
プロジェクト側の設定ミスか何かなのかな〜と思ってたらApache側でしたね。

httpd.confの中身を覗いてみると、

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>
~
~
<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

<Directory "/var/www"></Directory>
<Directory "/var/www/html"></Directory> の中の AllowOverride がNoneになってますが、
ここが原因だったみたいです。 それぞれ AllowOverride All に直して、Apacheを再起動してあげましょう。

$ systemctl restart httpd

これでルーティング上手く行きました。

vagrant up でUIDについて怒られたとき

vagrant up しようとしたら、以下のエラーが

The VirtualBox VM was created with a user that doesn't match the
current user running Vagrant. VirtualBox requires that the same user
be used to manage the VM that was created. Please re-run Vagrant with
that user. This is not a Vagrant issue.

The UID used to create the VM was: 0
Your UID is: 100

このときはvagrant upだけじゃなくて,vagrantに関するの他のコマンド全てがこのようなエラーが出て実行できないはずです。

見てみると、VMの作成者のIDが0にも関わらず、お前は100じゃないかと。 作成者IDを持つユーザで実行しよう。的なことが言われてます。

そんなときは .vagrant/machines/default/creator_uid に書いているIDを自分のユーザのものに書き換えると良いらしいです。

0

100

参考→Vagrantの起動時に発生するUID競合を修正してみた

これで先のようなエラー文は出てきません。

このcreator_uidというのは,最初にvagrant upしたユーザのidが書き込まれてます。

(ちなみにuidは dscl . -list /Users uid でユーザ名と合わせて確認できる)

今回は0になってたので、最初にrootでvagrant up(sudo)しちゃったのが原因だと何となく分かります。

注意点としては、この状態でvagrant upかますと、初めてupしますよ〜的なノリで立ち上がり始めます。 つまり、色々と環境を整えてから、書き換えてupするとそれがパーになります。

かなり初期の状態なら、迷わず書き換えても良いと思うけど、がっつり手を加えてしまったらば、

BOX作って追加して…とやったほうが良さそう。

一応、以下手順

vagrant package

vagrant box add *** package.box 

vagrant init ***

vagrant up

もちろん最初にvagrant upするときは、今後利用するであろうユーザなのを確認してからにしましょう。