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]);