non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

久しぶりにCordovaを動かしてみたら動かなかった

おはようございます。7月は奥さんが海外出張で実家に来てから、長男、次男が夏風邪で、月末まで実家生活で、地元の盆踊りに子供達を2回も連れて行けたりした@kjunichiです。

背景

AndroidiOSに対応する(つもりの)mrubyを組み込んだcordovaのプラグインを昨年作った。

その後、すっかり触らず、 思い出して、cordovaを動かしてみたら、動かなくなっている!

Androidのarmなエミュレーターが起動しない

昨年作成したプラグインx86のバイナリが含まれておらず、armで動かす必要があった。しかし、 どうもcordovaからは、x86エミュレーターは呼び出せるが、armなエミュレーターは呼び出せない。

対策

Android Studio経由、もしくは単独AVDマネージャーで予めarmなエミュレーターを事前に動かしておく。

iOSエミュレーターが動かない

TypeError: Cannot read property 'replace' of undefined 

このエラーで動かない。

対策

cd platforms/ios/cordova/node_modules/
sudo npm install ios-sim@latest

今回、ふと思いついて、始めるにあたり、新規のcordovaのプロジェクトを作成しての作業かつ、cordovaも更新したつもりだが、 上記のようにios向けのnode.jsモジュールディレクトリで、ios-simモジュールを最新版に更新することで、エラーが解消した。

まとめ

Android, iOSともエミュレーターで取らぶったが、なんとなく、昨年、プラグイン作っているある程度動かせるようになってからは、 Android,iOSともに、ひたすら実機でトライアンドエラーしていたような気がしてきた。

今回みたいに動かないこともあるものの、cordovaはハイブリッドアプリ開発の中ではメジャーなので、エラーメッセージを頼りに検索すれば、 Stackoverflow等で情報が見つかることが多そうな感じ。

次回の課題

libmruby.aをどうやって作っていたか?

iOS向けはFatバイナリーみたいなことをやった記憶がうっすらある。Androidx86_64向けも作ってその時のメモをQiitaに投稿はした。

あと、そもそもCordovaのプラグイン自体の開発ってローカルでどうやってたんだ?

cordova plugin add --link ~/path/to/plugin

と見つけたが、記憶がない。

関連記事

3年後の記事

DockerのAlpine Linuxでタイムゾーンでハマった

おはようございます。奥さんが毎年恒例の海外出張で子供達と実家に来てます。この間、次男が夏風邪で結構高熱になったり平熱近くになったりしてましたが、さすがに一週間近く経ち、次男もすっかり回復しました。@kjunichiです。

Docker

Docker

背景

herokuからnode.jsの脆弱性出たからバージョン挙げてねーっとメールが来た。 無料枠でお世話になっているの、放置してアカウント凍結されたらシャレにならないので、早速対応。

DockerベースでNode.jsを使ったSlackボットがこの中に含まれ、これのNode.jsのバージョンも 上げようとしたら、アメッシュの画像を表示する機能がうまく動作しないことが分かった。

アメッシュの雨の表示がおかしい

github.com

デバッグ文をいれて、JSTな時刻でnode.jsが処理されていないことが判明。

タイムゾーンを設定する

いままで、もしかすると、Slackの自作ボットは9時間前の雨の様子を表示してたのかも(爆

まぁ、そこは今回のNode.jsのアップグレード対応で問題点が分かったので良しとして進もうw。

なんかうまく行かない

早速Alpine Linuxでのタイムゾーンの設定を探すと、tzdataを一旦インストールしてその後に、 cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtimeして、コピーした後に、tzdataを削除する というのがDockerなAlpine Linuxでの設定方法のようだった。

直接コンソールに入ってdateコマンドを実行してもGMTで表示される!

解決

どうやらTZを設定してるとtzdataパッケージを消してはダメらしい

RUN apk --update add tzdata && \
    rm -rf /var/cache/apk/*
ENV TZ Asia/Tokyo

まとめ

環境変数TZが設定されてされていると/etc/localtimeを参照しない。 tzdataパッケージが必要なので、消してはダメ

まぁ、unset TZしてtzdata消すのがイメージサイズ節約になるからこっちの方が 場合によってはいいだろうが、今後タイムゾーンの実験するかもなので残しておいた。

Node.jsのv8系に一気にあげても、expressからSlackのボットまで問題なく動いてそう。

以前書いた記事

アメッシュの画像を表示するslackのボットをbotkitを使ってDockerイメージにしてherokuで動かした - non vorrei lavorare

を見直すと、タイムゾーンの対応してあるが、どうもこの後、HerokuでのDockerコンテナの扱いが変更され、この記事当時の様なHeroku向けの コンテナを作る必要が無くなり、普通にコンテナ作ってデプロイできるようなっり、これに対応したつもりだったが、今回のタイムゾーン問題に 遭遇した模様。

参考資料

関連記事

ハマったつながり

1年後の記事

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

pyenvにはCONFIGURE_OPTSではなくPYTHON_CONFIGURE_OPTSだった件

こんにちは。しばらく、奥さんが海外出張で不在の為、実家に子供達と来ている@kjunichiです。

前回の記事

abrakatabura.hatenablog.com

ではpyenvで2.7.13は--enable-frameworkを指定するとビルドできませんでした。

しかし!

またまた、Qiita経由id:antimon2_math さんにコメント頂き、解決しました。

CONFIGURE_OPTSではなく、PYTHON_CONFIGURE_OPTSに--enable-frameworkを指定することで、 無事2.7.13でもframework形式でビルド出来ました。感謝!

まとめ

思い込みよくない、ドキュメントをよく確認しましょう。。 PyCall.jlのREADMEを改めて見返すとPYTHON_CONFIGURE_OPTSと記載されてました。

関連記事

10年前の記事

5年前の記事

1年前の記事

1年後の記事