vagrantのボックスは他のPCに移行するとき ネットワークまわりで注意が必要なようだ
Vagrantfileにはhostonlyの設定をひとつしか記述してないので、2つのethがしかも同じIpアドレスのものができて、おかしいと思っていました。
https://qiita.com/YusukeHigaki/items/36cd2d4b60f049815fc6
こちらを参考にさせていただきました
どうやら、Macアドレスが固定化される問題があるらしい。
また、いろいろ操作しているうちに
vagrant destroyを忘れると
起動時に Warning: Remote connection disconnect. Retrying...がでてしまう。
これもhttps://teratail.com/questions/38135 を参考にさせていただきました。
2017年9月30日土曜日
2017年9月23日土曜日
vagrant box 移行 覚書
おおまかな流れとして
すでに以前 作成した設定が残っているとうまくいかないことが多いようなので
あらかじめ、以下のような操作で できるだけ不要なものは削除しておくといいようだ。
vagrant halt
vagrant destroy
vagrant box remove ボックス名
vagrant packageでエクスポート
別のPCの該当フォルダにpackage.boxをコピー
vagrant box add newboxname package.box
vagrant box listで確認
ここでいったん vagrant init
ただし、できたVagrantfileは編集する必要がある。
Vagrantfileでconfig.vm.box = "newboxname" その他、ネットワーク等さまざまな初期設定を書き込む
vagrant up --provision
で起動
これらの操作をバッチファイルにまとめ、それをさらにC#でわかりやすく操作できるようにしてみた。コマンド知らない人にもサーバ構築できるようなものを試しにつくれないか検討中。
さまざまなPCで、インストールを試してみたら、うまくいかないものがあった。
バッチコマンドの実行中に文字化けが、、どうやら、全角文字が原因らしい。
調べてみると、やはりそうでした。パス名の中に全角文字があるとうまくいかない仕様になっているとのこと。
対策は、環境変数にVAGRANT_HOMEを追加すること。この環境変数により、ディフォルトパス(ユーザープロファイルのパス)でなく、任意に変更できる。そういえば、vagrant関連データを、c:\の直下にフォルダを作ってもうまく行かなかった。この方法なら、自分で好きなところにフォルダを作りそこに関連データを置ける。そしてそのフォルダ名は当然全角にはしないこと。
すでに以前 作成した設定が残っているとうまくいかないことが多いようなので
あらかじめ、以下のような操作で できるだけ不要なものは削除しておくといいようだ。
vagrant halt
vagrant destroy
vagrant box remove ボックス名
vagrant packageでエクスポート
別のPCの該当フォルダにpackage.boxをコピー
vagrant box add newboxname package.box
vagrant box listで確認
ここでいったん vagrant init
ただし、できたVagrantfileは編集する必要がある。
Vagrantfileでconfig.vm.box = "newboxname" その他、ネットワーク等さまざまな初期設定を書き込む
vagrant up --provision
で起動
これらの操作をバッチファイルにまとめ、それをさらにC#でわかりやすく操作できるようにしてみた。コマンド知らない人にもサーバ構築できるようなものを試しにつくれないか検討中。
さまざまなPCで、インストールを試してみたら、うまくいかないものがあった。
バッチコマンドの実行中に文字化けが、、どうやら、全角文字が原因らしい。
調べてみると、やはりそうでした。パス名の中に全角文字があるとうまくいかない仕様になっているとのこと。
対策は、環境変数にVAGRANT_HOMEを追加すること。この環境変数により、ディフォルトパス(ユーザープロファイルのパス)でなく、任意に変更できる。そういえば、vagrant関連データを、c:\の直下にフォルダを作ってもうまく行かなかった。この方法なら、自分で好きなところにフォルダを作りそこに関連データを置ける。そしてそのフォルダ名は当然全角にはしないこと。
2017年9月17日日曜日
リバースプロキシについて
Macアドレスで制限があると、仮想ホストの運用しにくい?のでないか。
よくわからないけど、念のため、リバースプロキシを使って物理ホストのイーサネット
にアクセスしたものを、仮想ホストのイーサネットに転送させてみようかと考えた。
nginxが手軽で便利なようだ。
server {
listen 8080;
server_name i5;
location / {
proxy_pass http://192.168.1.111:8080;
proxy_redirect default;
}
としてみたら、なんとかうまくいった。
http://192.168.1.111:8080/とするとうまくいかなかった。
<追記>
ホストで8080を使っていたため、nginxを使うことにしたけれど、やはりホストの8080は停止して、シンプルにvagrantで ポートフォワードを使うことにした
よくわからないけど、念のため、リバースプロキシを使って物理ホストのイーサネット
にアクセスしたものを、仮想ホストのイーサネットに転送させてみようかと考えた。
nginxが手軽で便利なようだ。
server {
listen 8080;
server_name i5;
location / {
proxy_pass http://192.168.1.111:8080;
proxy_redirect default;
}
としてみたら、なんとかうまくいった。
http://192.168.1.111:8080/とするとうまくいかなかった。
<追記>
ホストで8080を使っていたため、nginxを使うことにしたけれど、やはりホストの8080は停止して、シンプルにvagrantで ポートフォワードを使うことにした
2017年9月16日土曜日
Dockerで注意必要なこと
その1 Dockerをいろいろ試し見ているが、なぜか文字化けが発生した。
ディフォルトではだめならしい。
こちらを参考に、cd /rootで
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 というコマンドを実行して、tomcatを再起動したら
解消した。このへんは、ネットの情報がないと、なんとも対処できそうにない。
その2 sambaがうまくいかない
ポートを指定してやる必要があるようだ。
こちらを参考にさせていただきました。
docker run -p 139:139 -p 445:445 のような指定をするとOkでした。
いろいろ、細かいところでひっかかるところがあるようです。
その3 vagrantの中でdocker runを行うとき、コンテナの中でプロセスを実行するには?
ネット上で、例を見つけるのが大変だったが、cmd: という記述を追加することがわかる。
結局、以下のようにすると うまくいった。
注意点として、vagrant upだけではだめで、vagrant up --provisionと打ち込まないとうまくdockerが動かない。
config.vm.provision "docker" do |d|
d.run "イメージ名(ただし、:は使わないほうがいい?)", cmd: "/init.sh" , args: " -e LANG=ja_JP.UTF-8 -p 139:139 -p 445:445 -p 8080:8080 --cap-add SYS_PTRACE -it -v /vagrant:/tmp/shared"
end
ディフォルトではだめならしい。
こちらを参考に、cd /rootで
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 というコマンドを実行して、tomcatを再起動したら
解消した。このへんは、ネットの情報がないと、なんとも対処できそうにない。
その2 sambaがうまくいかない
ポートを指定してやる必要があるようだ。
こちらを参考にさせていただきました。
docker run -p 139:139 -p 445:445 のような指定をするとOkでした。
いろいろ、細かいところでひっかかるところがあるようです。
その3 vagrantの中でdocker runを行うとき、コンテナの中でプロセスを実行するには?
ネット上で、例を見つけるのが大変だったが、cmd: という記述を追加することがわかる。
結局、以下のようにすると うまくいった。
注意点として、vagrant upだけではだめで、vagrant up --provisionと打ち込まないとうまくdockerが動かない。
config.vm.provision "docker" do |d|
d.run "イメージ名(ただし、:は使わないほうがいい?)", cmd: "/init.sh" , args: " -e LANG=ja_JP.UTF-8 -p 139:139 -p 445:445 -p 8080:8080 --cap-add SYS_PTRACE -it -v /vagrant:/tmp/shared"
end
2017年9月9日土曜日
vagrantとDockerをざっと知る
http://qiita.com/hidekuro/items/fc12344d36d996198e96
上記のリンクが参考になりました。
簡単に仮想サーバを用意して
さらにそのなかに、いろいろなプロセスを簡単に動かせるので便利かもしれません。
うまく活用すれば環境構築がだいぶスムーズにできそうです。
ひっかかったところ
その1:vagrant でパブリックネットワークを固定Ipにする方法がよくわからない
結局、
config.vm.network :public_network, :ip => "192.168.1.123" , :netmask=>"255.255.255.0" , :bridge => "Intel(R) Ethernet Connection (2) I218-V"
のようにしてやるとうまくいった。ただし、Intel(R) Ethernet Connection (2) I218-Vの部分は自動では取得しないので、Windowsの場合は、ネットワークのイーサネットから接続の方法の欄あたりからコピペするしかない。このへんも自動取得してほしいところだが。。
その2:dockerのUbuntu14.04の中でなぜかtomcat7が起動しない
ネットで調べたら、解決方法がでていた
https://stackoverflow.com/questions/29683231/tomcat7-fail-to-start-inside-ubuntu-docker-container
docker run --cap-add SYS_PTRACEとするらしい
その3:dockerのブリッジのIpアドレスの固定のしかたがわからない。
http://qiita.com/bellx2/items/21fdc3bdc6958f749f3e
に方法が出ていた。
たしかに/etc/default/dockerの
DOCKER_OPTS="--bip 192.168.1.126/24 "
を追加して、再起動したら、うまくいった。
ただ、こうすると コンテナに192.168.1.1が割り振られてしまう。ここはすでに使っているので、対処療法的だけど DOCKER_OPTS="--bip 192.168.1.130/25 としてみた。でも、これは、以下のことから、あまり意味が無いことが判明。
その4:やはりコンテナにアクセスできない。
docker run -p 8080:8080 というようにしてやるといいらしい。
http://christina04.hatenablog.com/entry/2016/07/22/193000
すると、コンテナの192.168.1.129ではアクセスできないけれど
ブリッジの192.168.1.130やホストOSのアドレスでアクセスすると、コンテナ内の
サーバにアクセスできる。
いまいち、すっきりしないが、とりあえず、解決。
上記のリンクが参考になりました。
簡単に仮想サーバを用意して
さらにそのなかに、いろいろなプロセスを簡単に動かせるので便利かもしれません。
うまく活用すれば環境構築がだいぶスムーズにできそうです。
ひっかかったところ
その1:vagrant でパブリックネットワークを固定Ipにする方法がよくわからない
結局、
config.vm.network :public_network, :ip => "192.168.1.123" , :netmask=>"255.255.255.0" , :bridge => "Intel(R) Ethernet Connection (2) I218-V"
のようにしてやるとうまくいった。ただし、Intel(R) Ethernet Connection (2) I218-Vの部分は自動では取得しないので、Windowsの場合は、ネットワークのイーサネットから接続の方法の欄あたりからコピペするしかない。このへんも自動取得してほしいところだが。。
その2:dockerのUbuntu14.04の中でなぜかtomcat7が起動しない
ネットで調べたら、解決方法がでていた
https://stackoverflow.com/questions/29683231/tomcat7-fail-to-start-inside-ubuntu-docker-container
docker run --cap-add SYS_PTRACEとするらしい
その3:dockerのブリッジのIpアドレスの固定のしかたがわからない。
http://qiita.com/bellx2/items/21fdc3bdc6958f749f3e
に方法が出ていた。
たしかに/etc/default/dockerの
DOCKER_OPTS="--bip 192.168.1.126/24 "
を追加して、再起動したら、うまくいった。
ただ、こうすると コンテナに192.168.1.1が割り振られてしまう。ここはすでに使っているので、対処療法的だけど DOCKER_OPTS="--bip 192.168.1.130/25 としてみた。でも、これは、以下のことから、あまり意味が無いことが判明。
その4:やはりコンテナにアクセスできない。
docker run -p 8080:8080 というようにしてやるといいらしい。
http://christina04.hatenablog.com/entry/2016/07/22/193000
すると、コンテナの192.168.1.129ではアクセスできないけれど
ブリッジの192.168.1.130やホストOSのアドレスでアクセスすると、コンテナ内の
サーバにアクセスできる。
いまいち、すっきりしないが、とりあえず、解決。
2017年9月7日木曜日
JAVA Linuxではパスからファイル名がうまく取得できない
Windowsでは、うまくいっても、Linuxではうまく動作しないということがよくある。ファイルアップロードの手直しをしている際に、またそういうところに遭遇する。
パスからのファイル名の取得に関するメソッドgetName()です。\¥か/で違いがあるので、やむを得ないところもあるが、WIN,Linuxどちらでも使えるようにするためには、それなりの工夫が必要なようです。
http://buzzword111.hatenablog.com/entry/2017/06/21/102518
上記のリンクを参考にさせていただきました。
パスからのファイル名の取得に関するメソッドgetName()です。\¥か/で違いがあるので、やむを得ないところもあるが、WIN,Linuxどちらでも使えるようにするためには、それなりの工夫が必要なようです。
http://buzzword111.hatenablog.com/entry/2017/06/21/102518
上記のリンクを参考にさせていただきました。
2017年9月4日月曜日
IE11ではFormDataのメソッドがすべて使えない
HTML5の機能としてFormDataが便利ですが
残念ながらIE11ではappendのメソッドしか使えないようです。
最初、これがわからず、ファイルのDrag&Dropのところで
Chromeで動くのに、IE11だと動かない現象に悩まされました。
getメソッドが使えないのが原因なので、結局getを使わずにappendする前に
必要な値は取得しておくことで解決しました。
よく考えれば当たり前の対策なのですが、getを無理に使うことばかりにとらわれてしまいました。
残念ながらIE11ではappendのメソッドしか使えないようです。
最初、これがわからず、ファイルのDrag&Dropのところで
Chromeで動くのに、IE11だと動かない現象に悩まされました。
getメソッドが使えないのが原因なので、結局getを使わずにappendする前に
必要な値は取得しておくことで解決しました。
よく考えれば当たり前の対策なのですが、getを無理に使うことばかりにとらわれてしまいました。
ラベル:
HTML5,
javascript
2017年9月3日日曜日
FormDataを使ってファイルアップロードとパラメータ渡しを同時に行う方法
ファイルのアップロードとパラメータ渡しを同時に行うのは意外とやりにくい。Formからボタンをクリックして行うのはまだいいとしても、Drag&Dropなど行うには工夫が必要なようだ。
解決方法がこちらにでていた。
https://stackoverflow.com/questions/5512442/input-type-text-value-from-jsp-form-enctype-multipart-form-data-returns-null
これを参考にして パラメータはHashを使ってみた。サーバのほうは、こんな感じです。
File dirs = new File(path+"tmp");
if (!dirs.exists()) {
dirs.mkdir(); //make folders
}
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Iterator<FileItem> iterator = upload.parseRequest(request).iterator();
HashMap<String,String> map = new HashMap<String,String>();
String filename="";
while (iterator.hasNext()) {
//ファイルはひとつが前提。複数ファイルなら最後のファイル名のみ取得
FileItem item = iterator.next();
if (!item.isFormField()) {
filename= item.getName();
item.write(new File(path+"tmp/" + filename));
}
else {
String otherFieldName = item.getFieldName();
String otherFieldValue = item.getString();
map.put(otherFieldName ,otherFieldValue);
}
}
クライアントのほうは
var formData = new FormData();
formData.append('flg','foo');のようにパラメータを追加していく
このFormDataに ドロップされたファイルは
var files = event.dataTransfer.files;
fd.append('file', files[i]); とするとよいようだ。(iをforなどで処理する。)
あとは、ファイルもパラメータも一緒にformDataとして非同期でサーバに送ります。
var uploadURL ="fileupload"; //Upload URL
$.ajax({
url: uploadURL,
type: "POST",
contentType:false,
processData: false,
cache: false,
data: formData,
success: function(data){
..............というように
解決方法がこちらにでていた。
https://stackoverflow.com/questions/5512442/input-type-text-value-from-jsp-form-enctype-multipart-form-data-returns-null
これを参考にして パラメータはHashを使ってみた。サーバのほうは、こんな感じです。
File dirs = new File(path+"tmp");
if (!dirs.exists()) {
dirs.mkdir(); //make folders
}
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Iterator<FileItem> iterator = upload.parseRequest(request).iterator();
HashMap<String,String> map = new HashMap<String,String>();
String filename="";
while (iterator.hasNext()) {
//ファイルはひとつが前提。複数ファイルなら最後のファイル名のみ取得
FileItem item = iterator.next();
if (!item.isFormField()) {
filename= item.getName();
item.write(new File(path+"tmp/" + filename));
}
else {
String otherFieldName = item.getFieldName();
String otherFieldValue = item.getString();
map.put(otherFieldName ,otherFieldValue);
}
}
クライアントのほうは
var formData = new FormData();
formData.append('flg','foo');のようにパラメータを追加していく
このFormDataに ドロップされたファイルは
var files = event.dataTransfer.files;
fd.append('file', files[i]); とするとよいようだ。(iをforなどで処理する。)
あとは、ファイルもパラメータも一緒にformDataとして非同期でサーバに送ります。
var uploadURL ="fileupload"; //Upload URL
$.ajax({
url: uploadURL,
type: "POST",
contentType:false,
processData: false,
cache: false,
data: formData,
success: function(data){
..............というように
ラベル:
java,
javascript,
jquery
登録:
投稿 (Atom)