Brew the Mash

クラフトビール好きなITエンジニア@mashmorgan_jpの開発メモなど

【Node.js】ConohaVPSでNode.js + express + sqlite環境構築時にnpm install実行時にsqlite3エラー

テストAPIサーバー用に、ConohaVPSでNode.js + express + sqlite 環境を構築しようとしたらnpm installにてsqlite3でエラーが出ている。

Error: Cannot find module 'sqlite3'

403とかあるので何かしら環境に問題がありそう。

stackoverflowでは npm install sqlite3 --build-from-source を試せとあったが、これを実行しても変わらず。

https://stackoverflow.com/questions/20221825/node-js-says-it-cant-load-sqlite3-module-but-does-anyway

どうしたもんかと小一時間悩んで、参照元(mapbox)のgithubをみて以下コマンドを試したらすんなりinstallできました。 これで無事に解決。

npm install https://github.com/mapbox/node-sqlite3/tarball/master

https://github.com/mapbox/node-sqlite3

【Wordpress】既存WPをConahaへ引っ越ししたらメール送信が出来なくなってた

今回はWordpress関連のメモ。

既存サーバー(ServersmanVPS)で運用していたWordpressを、Conaha VPSにお引越ししました。

その際にSSL証明書など一通り移管し終えてやれやれと思ってたら、問い合わせフォーム送信時のメールが届いてないことが発覚。。。

Conohaは公式の手順通りにCentOS/MariaDB/nginxを設定していたのでpostfixは動いている模様。 そこで /var/log/maillogを見ていたらどうやらメールドメインが正しく設定されていないよう。 エラーメッセージはこんな感じ。

553 5.1.8 Domain of sender address <localdomain> does not exist. (in reply to MAIL FROM command))

以下サイトを参考に、postfixのmain.cfのmyhostnameを設定する事で解決しました。

$ vim /etc/postfix/main.cf
---
#myhostname = host.domain.tld
↓
myhostname = {hogehoge.com}
---

service postfix restart

参考にさせて頂いたサイト: hacknote.jp

【iOS】iTunes Storeにアップロード時に"UIRequiredDeviceCapabilities"エラー

久しぶりに苦しめられたのでメモ。 既存アプリの更新で、テストまで完了したので申請のためアップロードしようとすると毎回以下のエラーが発生。。。

WARNING ITMS-90109: "This bundle is invalid. The key UIRequiredDeviceCapabilities in the Info.plist may not contain values that would prevent this application from running on devices that were supported by previous versions. Refer to QA1623 for additional information: https://developer.apple.com/library/ios/#qa/qa1623/_index.html"

リンク先みてもパッとしない内容だったので、例のごとくStackOverFlow等をググっていたら、諦めろだのアプリを一回消して新しいものにしろだの無茶苦茶でした。 原因がいろいろあるので解決方法もいろいろありそうですが、とりあえず自分のケースは「info.plistから、Key:UIRequiredDeviceCapabilitiesおよびその値がArrayを削除」でエラー回避できました。

こちらのブログにて情報を見つけました、ありがとうございました。

staff.qualias.jp

【iOS】CarthageでRealmを入れようとしたら"Incompatible Swift version"エラー

表題の通り。

CarthageでRealmを導入しようと思い、homebrewからCarthageをインストール。

そして手順に沿って、Carthageファイルを作成し、carthage bootstrap --platform iOSコマンドを実行したところ"Incompatible Swift version"エラーが発生。

詳細はこんな感じ。

*** Skipped installing realm-cocoa.framework binary due to the error:
    "Incompatible Swift version - framework was built with 4.1 (swiftlang-902.0.48 clang-902.0.37.1) and the local version is 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)."

ググったら同じ人がいて、--no-use-binariesオプションをつけてごらん、とのこと。

github.com

やってみたら成功しました。(すごく時間かかりましたが)

こういう環境作りで時間取られるのは本当にもったいないと思う今日このごろ。

【Android】パッケージ名をさっと変更したい場合の手順

Android Studioのプロジェクトで、ベースがあればリネームして別アプリ環境をさっと作りたいなどよくあると思います。 ググってみると割と古い情報が出てきて全部手動で頑張れ、的なものが多かったんですが、Android Studio上でやれば簡単に出来たので個人メモとして残しておきます。

1. パッケージ名を一括リネームする
  • Android Studioの[1:Project]の表示を「Android」にする
  • app - java 以下にあるプロジェクト名(例. com.example.appなど)にカーソル当てて右クリック
  • [Refactor] - [Rename]を選択
  • Warningウィンドウが出ますが気にせず「Rename package」ボタン押す
  • Renameしたい名前を入力し「Refactor」ボタンを押す
  • 画面下の[3:Find]に変換対象のファイル一覧が出るので「Do Refactor」ボタンを押して実行

ファイルの中のパッケージ名はこれで一括変換できます。

2. build.gradleの修正
  • build.gradle(Module: app)のほうを開き、[applicationId]を変更後の名前に修正
  • 画面上に再同期のメッセージが出るので「Sync Now」でgradleを再ビルド
3. アプリ名の修正(必要な場合のみ)
  • アプリ表示名を変える場合は、res/values/strings.xml のapp_name も変更

以上です、非常に簡単ですね!

【Android】RealmをバージョンアップしようとしたらJava8のエラー

Realmを最新(この時点では5.1.0)にあげようとしたところ、以下のようなエラーが。

Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add 
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.

いろいろググってみたところ、RealmがJava8依存のコンパイルに変えた事が原因みたい。 Android Studioを3.x にすればこの問題は解決するとのこと。

しかし、自分の開発環境は訳あってAndroid Studio 2.3.3なのだ。。。 そこで最新は諦めてJava8依存前のバージョンまであげることにしました。

(もちろん?)公式サイトには情報がないので、こちらに記載してある内容を参考にしました。

forum.realm.io

結論:Android Studio2.3.xを使ってる人は、Realm 4.2.0までにしといたほうがいいかも

もちろんRetrolambda等で無理やり最新にする方法はあるようですが、やってみたけど上手くいかず、あとbuild.gradleが汚れまくるので止めときました。特別な事情がない限りは、素直にAndroid Studio3.x を使ったほうが良さそうですね。

【Android】1度開いたMapFragmentを再度開こうとするとInflateException

下タブをつけたAndroidアプリを作成しており、各タブはFragmentにしたのですが、MapFragmentを初回は表示できるのに別タブ選択後に再度表示しようとすると以下のエラーが発生。

android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #15: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line #15: Duplicate id 0x7f0f00f3, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment

なんかfragmentの管理が出来てないっぽいけど解決方法がなかなか見つけられず。 すると英語ですがほぼ同じ現象のブログ(下部参考元)を発見!! (本当に有り難いです)

ポイントはViewをstaticで持たせるという点でした。

static View rootView;

viewをstatic化してnullチェックを入れるだけで無事に解決しました。

参考元: Android MapFragment exception when clicked twicecolinyeoh.wordpress.com