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
新しいバージョンをインストール
下記に新しいバージョンがどんどん追加されている。
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でこんな感じに生成できちゃいます。
これをコピペするのが吉ですね。

今回は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するときは、今後利用するであろうユーザなのを確認してからにしましょう。
MySQLで文頭・文末の空白を消したいとき
文末の空白を消したいとき
UPDATE [table_name] SET [column_name] = TRIM(TRAILING ' ' FROM [column_name]);
頭のとき
UPDATE [table_name] SET [column_name] = TRIM(LEADING ' ' FROM [column_name]);