Wherehows Build Code with Windows
Wherehows Build Code with Windows
Date: 2017/11/27
前置作業 ( 請優先參考 官網 ) :
1. java sdk 1.8
2. 安裝 docker, docker-compose
3. git bash for windows
4. 設定JAVA_HOME的環境變數
5. 設定HADOOP_HOME的環境變數
6. 確認網路環境是否不會限制存取特定網域資訊
7. (Optional) 建議不要在已經下載好的模組下 rebuild module,不適用於此case
8. (Optional) 盡可能不要在本機也裝不同版本的 nodejs,有時候會有問題
9. (Better) 給予Docker Default VM 4GB RAM以上的空間
1. java sdk 1.8
2. 安裝 docker, docker-compose
3. git bash for windows
4. 設定JAVA_HOME的環境變數
5. 設定HADOOP_HOME的環境變數
6. 確認網路環境是否不會限制存取特定網域資訊
7. (Optional) 建議不要在已經下載好的模組下 rebuild module,不適用於此case
8. (Optional) 盡可能不要在本機也裝不同版本的 nodejs,有時候會有問題
9. (Better) 給予Docker Default VM 4GB RAM以上的空間
設定環境變數
- JAVA_HOME
(1). Wherehows要用java 1.8 build, 設定方式如下
(2). (Optional) 若已經build test failed,要先清除因test fail產生但未清除的測試檔案
目錄應是: /c/Users/<USER-NAME>/AppData/Local/Temp/
若裡面沒有但是還是在common-test fail,可參考這裡,修改程式以顯示temp***.job的所在路徑
清除指令:rm temp*.job
-
(1). 設定使用者的環境變數
HADOOP_HOME = <PATH-TO>\hadoop-common-2.2.0-bin-master
(2). 在系統path加上 ${HADOOP_HOME}\bin
若不設定,./gradlew build
會失敗
可用./gradlew build -x test
跳過但不建議
Build code 方式
一般權限開啟 git bash 即可
- 於 Project根目錄 WhereHows/ , 輸入以下指令
./gradlew build
- (推薦) WhereHows/wherehows-docker/ , 輸入以下指令
# ./build.sh <image-version>
./build.sh 1
# if success
docker-compose up
Windows 無法順利build code的問題摘要:
- wherehows-web 中的 Ember build failed
- Error Log https://github.com/linkedin/WhereHows/issues/855
Root Cause file @ wherehows-web/
node_modules/broccoli-eyeglass/lib/broccoli_sass_compiler.js
問題描述
sass-eyeglass/broccoli-eyeglass 模組尚未處理windows路徑,
加上nodejs對不同作業系統有各自處理路徑的機制。因此:
加上nodejs對不同作業系統有各自處理路徑的機制。因此:
- 直接給windows路徑會無法正確讀取檔案。需修改 scopedFileName & filesInTree function。
- 沒特別將來源的css檔案路徑切分css根目錄 (例如: app/styles/),導致會在wherehows-web/dist/assets/ 產生包含css根目錄的css file (例如: dist/assets/app/styles/),因此網頁會找不到應該在預設目錄下(assets/)的wherehows-web-FINGERPINRT.css。需修改 parsePath function,針對windows os特別處理注意: 這是針對emberApp做的修改,其他framework要再看看
broccoli_sass_compiler.js 的 原始碼
Fast-solution
可參考自行修改的範例檔案:
- broccoli_sass_compiler.js 解壓縮到 WhereHows/wherehows-web/
- ember.gradle 覆蓋掉 WhereHows/gradle/scripts/
Detail Solution
(1). 修改以下程式碼,並把修改好的broccoli_sass_compiler.js
放在 WhereHows/wherehows-web/<PATH-TO>/ folder
broccoli_sass_compiler.js
放在 WhereHows/wherehows-web/<PATH-TO>/ folder
broccoli_sass_compiler.js
// Support for older versions of node.
function parsePath(pathname) {
if (os.platform() === 'win32') {
/* Remove emberApp default css's root folder.
In linux, before first '/' would be regard as root folder,
implies app/styles will be root folder after path.parse
In windows, root folder always is C:\\,
therefore app\\styles is dir folder not root folder
however, 'app\\styles' logically regarded as css's root in emberApp
*/
pathname = pathname.replace("app\\styles","")
}
/* 省略 */
}
/* 省略 */
module.exports = class BroccoliSassCompiler extends BroccoliPlugin {
/* 省略 */
scopedFileName(file) {
file = this.relativize(file);
if (this.treeName) {
return path.join(this.treeName, file);
} else {
return file;
}
}
/* 省略 */
filesInTree(srcPath) {
let sassDir = this.sassDir || "";
let files = [];
if (this.discover) {
let pattern = path.join(srcPath, sassDir, "**", "[^_]*.scss");
files = glob.sync(pattern);
}
this.sourceFiles.forEach(sourceFile => {
let pattern = path.join(srcPath, sassDir, sourceFile);
files = files.concat(glob.sync(pattern));
});
files = files.map(function(rawPath){
return path.normalize(rawPath);
});
return unique(files);
}
/* 省略 */
(2). 在 WhereHows/gradle/scripts/ 修改 ember.gradle
ember.gradle
/* 省略 */
task emberBuild(type: NodeTask, dependsOn: bowerInstall) {
doFirst {
copy {
// Copy the output of copyTask
from '<PATH-TO>/broccoli_sass_compiler.js'
into 'node_modules/broccoli-eyeglass/lib'
}
}
script = file('node_modules/ember-cli/bin/ember')
args = ['build', '--environment', 'production']
}
/* 省略 */
完成之後,確認沒有權限問題即可build
Develop with intellij IDEA
- WhereHows/ 輸入以下指令:
./gradlew idea
- open -> WhereHows 目錄打開即可,建議不要選擇 gradle.build
若照官網的建議選完之後,會有一些選項,一打開他就是無條件先gradle.build一番,但用intellij的gradle build目前會有問題。
Note: 不要用intellij的 gradle wrapper,也不在那build
Docker in new git bash windows
docker-machine start
(如果Docker那台VM還沒開)docker-machine env
- 把env輸出結果要求你複製貼上的貼上 e.g., 我的是
eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env)
- 在Wherehows-docker目錄下,下
docker-compose up
Docker elasticsearch memory too low
如果Elasticsearch開啟時會有 vm.max_map_count [65530] too low的問題
透過
透過
docker-machine ssh default
指令進入docker-machine後,輸入以下指令 :sudo sysctl -w vm.max_map_count=262144
References
- Detail solution 的 Github issue 討論串
以上內容參考自己的筆記
留言
張貼留言