気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Heroku 接続先URLを変更する

heroku リモートのリポジトリを消した場合、push先のURLを変更しないとpushできなくなる。

現状のリモートURLを確認する。

% git remote -v 
heroku  https://git.heroku.com/before-12345.git (fetch)
heroku  https://git.heroku.com/before-12345.git (push)

pushする際に、以下の様なコマンドを打つが、originにあたるのが、上記のheroku

git push origin master

以下のコマンド、push先のリモートURLを変更する。

git remote set-url heroku https://git.heroku.com/after-12345.git

変更完了したら、めでたく、pushができるようになります。
よかった。。

hostsの使い方

hostsファイル、よく使うファイルですが、 用途や使い方の理解が不十分かつ、よく忘れるので、備忘として記載します。

hostsファイルとは?

  • DNSより先に参照されるIPアドレスドメイン名の一覧のこと。
  • あるドメインのアクセス先IPを自分の端末だけ変更するために用いる。新サーバー構築時など。

ローカルでDNSサーバーのような役割を担う。
DNSサーバーはドメイン(www.google.co.jpなど)にIPアドレスを紐づけるサーバー

ファイルパス(Windows)

以下にhostsファイルが存在する。

c:¥windows¥system32¥drivers¥etc

使用例

DNSサーバーで指定しているロードバランサーを通さず直接、各Webサーバーにアクセスさせる

通常アクセスしているドメインにWebサーバーのIPを指定する。

192.168.122.5 abc.co.jp  

1つのアドレスに複数ドメインを指定して、複数のドメインを一つのサーバーにアクセスさせる

192.168.122.5 aaa.co.jp bbb.co.jp

192.168.122.5のサーバーに複数アプリを載せておき、指定ドメインでアクセスするアプリを切り替えることも可能です。

サーバー構築時(Appache+Tomcat)に知っておきたい設定ファイルやコマンド

1.Tomcatサーバー

設定ファイル server.xml

  • Tomcatサーバー動作を定義する設定ファイルです。
  • 配置パスは、/usr/local/tomcat/conf/以下や/opt/tomcat/conf以下に配置。
    $CATALINA_HOME\confディレクトリ配下に配置するのが一般的。

設定イメージ

<Engine ----->
  <Loggerタグの設定 ログX>
  <Host name="localhostA" >
    <Loggerタグの設定 ログY> <!-- ログXの設定は、ログYの設定で上書きされる -->
  </Host>
  <Host name="localhostB" >
  </Host>
</Engine>

2.Appacheサーバー

設定ファイル httpd.conf

  • Apache動作を定義する設定ファイルです。
  • 配置パスは、/etc/httpd/conf/。インストール時は、 /usr/local/apache2/conf/以下に配置されています。
  • /etc/httpd/conf.d/以下に拡張子が.confのファイルを配置すると、インクルードされます。 複数のアプリを配置する際などは、このconf.d/以下の設定ファイルを作成し、各アプリの設定を記載します。

設定ファイル内の3つのセクション

設定ファイル内の記載内容は以下のようなセクションがあります。

3つのセクション httpd.confの設定項目(ディレクティブ)は、その影響範囲によって主に下記の3つに分類されます。

Section1 GlobalEnvironment
Apache全体に影響を及ぼします
Section2 MainServerConfiguration
→ メインのサーバに影響を及ぼします。VirtualHost設定時のデフォルト値にもなります
Section3 VirtualHosts
→ 指定したドメイン/ホストに影響を与えます。MainServerConfigurationを上書きします
httpd.confについて調べたのでまとめたよ - ✘╹◡╹✘

httpd.confの設定例

Listen 80
ServerRoot "/etc/httpd"
DocumentRoot "/var/www/html/"

User  nobody
Group nobody
<IfModule prefork.c>
MaxClients       150
StartServers     5
MinSpareServers  5
MaxSpareServers 15
</IfModule>

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

MaxRequestsPerChild 0
ErrorLog logs/error_log

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

DocumentRoot以下がアプリの静的ファイルが置かれるディレクトリとなる。

config設定ファイルのシンタックス確認

http.confの文法チェックは以下のコマンドで行います。

$ /sbin/service httpd configtest
or
$ apachectl configtest
or
$ apache2ctl configtest

上記のコマンド実行時に、文法が正しいが正しい場合、「Syntax OK」と表示されます。

3. アプリサーバー構築時に確認する設定ファイル、コマンド

3.1 hosts

hostsファイルのパス:/etc/hosts

ファイル内容(例)

127.0.0.1  localhost
192.168.15.30 appweb.local

アプリにアクセスできない際、IPとドメインを指定する設定できていない場合があります。
その際は、hosts設定を見直します。

hostへのアクセス確認

% ping blog.hatena.ne.jp                                                                                                                   [14:59:20]
PING blog.hatena.ne.jp (52.68.15.58): 56 data bytes
64 bytes from 52.68.15.58: icmp_seq=0 ttl=234 time=53.195 ms
64 bytes from 52.68.15.58: icmp_seq=1 ttl=234 time=80.874 ms
64 bytes from 52.68.15.58: icmp_seq=2 ttl=234 time=94.243 ms
・
・
33 packets transmitted, 33 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 51.527/84.580/125.202/19.215 ms

33パケットを送信して、0%のパケットが喪失したことが上記で分かる。

3.2 httpアドレスへの接続確認

以下のコマンドでunix上から、URLへのアクセス可否を確認できる。

curl http://appweb.local:8080/

3.3 アプリのwar配備を確認

tomcatの場合、以下ディレクトリを参照して、warが配備されているかを確認

/usr/local/tomcat7/webapps

tomcat7の部分はバージョンが異なると変わる。

3.4 tomcat web アプリケーション マネージャー

以下URLにアクセスすることで、画面上でアプリのデプロイ状況を確認できます。
http://domain_name:8080/manager/html

ログインパスの確認場所

$CATALINA_HOME/conf/tomcat-users.xml

id,passwordの記載箇所は上記にあり。

3.5 ログの確認

デプロイができているがエラーが出ている場合は、アプリ内エラーを確認する。
出力先は、server.xmlの設定を確認。

server.xml

<Context path="/sampleAP" docBase="/home/sample/webapp">
  <Valve className="org.apache.catalina.valves.AccessLogValve" 
         directory="/var/log/web"
         prefix="access-"
         fileDateFormat="yyyy-MM-dd"
         suffix=".log"/>
</Context>

value内にディレクトリやファイル名の指定があります。

Java 例外クラス

Javaの例外クラスの基本についての要点を簡単に記載しておきます。

継承関係

-Throwable
--Error
--Exception
---RuntimeException

-の数が、継承関係を示します。

各種例外の意味するところ

例外クラス 説明
Throwable throw文に指定できるかどうかを表すクラス
Error キャッチすべきではない重大な問題を示します
Exception キャッチされる可能性のある状態を示す
RuntimeException メソッドの実行中にスローされるがキャッチされない例外。非チェック例外

まとめとクラス作成時のポイント

  • throwできる例外のが、Throwable。そのサブクラスがException、RuntimeException
  • Exceptionはキャッチされる可能性があるクラスにextendさせる
  • RuntimeExceptionはキャッチしてはいけないクラスにextendさせる

Atomエディタで矩形選択をする

初期状態では矩形選択ができないため、Atomのパッケージ管理コマンドを用いて、
パッケージをインストールする。

インストール方法

$ apm install sublime-style-column-selection

Atomを再起動する。

APMとは?

以下を参照して下さい。
Atomとapmを本腰入れて使い始める

使い方

Alt(Option)+ マウスを動かす(短形選択)

特に設定不要で簡単にできるようになりました。
サクラエディタはキーボードで選択できるが、こちらはマウス(トラックパッド)で選択しないといけない。。
でもわかりかし一般的なコマンドなので、忘れづらくて良いですね。

Unixの各種ログの意味(messages, cron, secure)

ログイン認証、メール送信ログなど様々な用途に応じて、様々な種類のログが存在します。 syslogなどのログ制御システムを介して出力する場合もあれば、プログラム自体が出力する場合もあります。

1. 一般的なログと格納先

ファイル名 用途 主な格納先 ログの出力元
cron cronの実行結果を保存 /var/log syslog
maillog メール関連 /var/log syslog
messages システムメッセージ、各種ソフト /var/log syslog
secure セキュリティ関連 /var/log syslog
access_log Apacheアクセスログ /var/log/httpd httpd
error_log Apacheのエラーログ /var/log/httpd httpd

ほとんどのアプリケーションは、syslogdを利用してログを出力しています。
syslogは、メールサーバプログラムのsendmail用に開発されたものだけど、広く浸透し、当たり前のように利用されている。
プログラム自体が出力するログとしては、WebサーバのApacheなどがある。

2. syslogの設定(syslog.conf)

各アプリケーションのログ設定は、/etc/syslog.confの値で決まります。 syslogdは、この設定ファイルを読み込みログを出力する。

2.1 syslog.conf

syslog.confのフォーマットは、「取得するログの指定」と「取得ログの出力先」の指定を行います。

*.info;mail.none;cron.none                              /var/log/messages

「取得するログの指定」は、facilityとpriorityから成ります。

facility(機能)

ログを出力する機能を指す。 auth,cron,ftp,mailなど

priority(重要度)

ログ出力の緊急度 emerg,alert,err,info,debug,noneなど

取得ログ出力先

どこに出力するかの指定 ファイル名, /dev/console, ユーザー, * など

3. syslog設定例

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;cron.none                              /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  /var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

・
・
・

Java8 LocalDateTimeと旧Dateの相互変換

Java8のLocalDateTimeからDateへの変換は思いのほか、骨が折れる。。
DBfluteのJava8対応で日時項目が、LocalDateTime型としてentity生成されているので、調べたがそもそも使わないというのもありかもしれない。。

LocalDateTimeからDateへの変換 その1

LocalDateTime ldt = LocalDateTime.now();
Date d = Date.from(ldt.toInstant(ZoneId.systemDefault().getRules().getOffset(ldt)));

LocalDateTimeからDateへの変換 その2

ZonedDateTimeを間に挟むやり方。見やすくはなる。

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
Date rd = Date.from(zdt.toInstant());

DateからLocalDateTimeへの変換

DateからLocalDateTimeへの変換は次のように書けます。

Date d;
LocalDateTime ldt = LocalDateTime.ofInstant(d.toInstant(), ZoneId.systemDefault());