文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

undefined method `hoge' for nil:NilClass (ruby)

こんなソースを書いたらおこられた。

for arr_i in 0...header.size do
header_str += header[arr_i].to_s
    ・
    ・
    ・


"+" がない?とかなんとか。。。。

NoMethodError:
undefined method `+' for nil:NilClass


んんんん?どういうこと?
rubyはプラスをつかえないの?


header_str = header_str + header[arr_i].to_s

って書き直したりしてみたりしても変わらず(当たり前)。。。


これ、javaでいうところのぬるぽなんですね・・・。
初期化してやったらうまくいきました。


for arr_i in 0...header.size do
header_str = ""
header_str += header[arr_i].to_s
    ・
    ・
    ・

javaとは出るエラーメッセージの内容が異なるので手こずりますね。

(未解決) windowsでrubyのversionを楽に切り替える「pik」

・pikのダウンロード
(programfiles内にダウンロードされます)
gem install pik


・pikディレクトリの作成
mkdir "C:\pik"


・PATHに C:\pik を追加
set PATH=%PATH%;C:\pik
エクスプローラーで右クリック > プロパティ > システムの詳細設定 > 環境変数 > システム環境変数 > PATHからでも設定可)


・今回使用するフォルダに必要なものをインストール
pik_install "C:\pik"


・インストールしてある複数のrubyのbinの場所をaddする
pik add C:\ruby-1.9.1-p376\bin
rubyをインストールしてなかったらインストールしてください
windowsではrubyinstallerを使ってrubyをインストールできます。
Downloads
インストールしたいバージョンをクリックしてそのまま進めば、Cドライブ直下にRuby187とかRuby193とかいうフォルダができます。



・addしたあとpik listでrubyのバージョン一覧を確認

pik list
187: ruby 1.8.7 [i386-mswin32] *
191: ruby 1.9.1p376 [i386-mswin32]
191: ruby 1.9.1p378 [i386-mingw32]

"* "がついているのが現在設定されているバージョン。



・別のバージョンに切り替えるとき

pik use ruby 1.9.1p376


・切り替わったか確認
pik list
187: ruby 1.8.7 [i386-mswin32]
191: ruby 1.9.1p376 [i386-mswin32] *
191: ruby 1.9.1p378 [i386-mingw32]

上記のように切り替わるはずなんだけど、ruby -vで確認すると ruby 1.8.7のままになってる。。。





pikを以下ページからダウンロードして再度やってみる

msiをダウンロードします。
Downloads · vertiginous/pik · GitHub


pik list
187: ruby 1.8.7 [i386-mswin32]
=> 191: ruby 1.9.1p376 [i386-mswin32]
191: ruby 1.9.1p378 [i386-mingw32]

上記でダウンロードすると、バージョンの表示が "*" でなく矢印なんですね。

でも使い方はまったく同じです。


さあ、バージョンをきりかえてみます。
pik use ruby 1.9.1p376


きりかわったかな??

ruby -v
ruby 1.8.7 [i386-mswin32]


・・・orz
はい。だめでした~。


原因わからず。

わかったらまた更新します。

                                    • -

2016/07/15追記

まだ動かない原因は謎ですが、いろいろ試してみたのでメモ。

インストーラーでpikをダウンロードすると、
 1.c:\pik
 2.C:\Users\ユーザー名\.pik
の2つのフォルダが作成される。

c:\pikには以下3ファイルが作成されている
・pik_runner.exe
・pik.ps1
・pik.bat

C:\Users\ユーザー名\.pik は空のディレクトリ。

pikコマンドを実行するとc:\pik\pik.batが実行される。
pik add でバージョンを追加すると C:\Users\ユーザー名\.pik 内に
・config.yml
・pik_run.bat

の2つが新たに作成される。


それで、ググってわかったのが c:\pik\pik.bat内の

"%PIK_HOME%"ってとこを %USERPROFILE% に変えてあげる必要があるということ。
Windows では %HOME% という環境変数は定義されていないため、変更してあげないといけない(要はバグとのこと)。


pik use rubyのバージョン を実行すると C:\Users\ユーザー名\pik_run.batが実行される。


うーーーん。。。なんだかこのpik_run.batってやつが怪しい気がする。。

pik_run.but内に記載されてるSET PATH=~~ってとこは動的に変わるっぽいんだけど、このパスはどっから持ってきてんだろう?
だめだ。わかんない。

「jenkins実践入門」を読んで

先日amazonにて購入したjenkins実践入門

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

一通り読んでみました。



jenkinsとは何か?というところからインストールの仕方、ジョブの作成・実行方法など
簡潔に記載されていて読みやすかったです。


ほんとに基礎なので、業務で本格的に色々やりたいってなったらさらに詳しい内容が欲しくなるかと思います。




せっかく本を読んだのでjenkinsを落として動かしてみてみました。



思ったこと、出くわしたトラブルなどをあげておきます。


・実行ファイル名が長すぎると「Request-URI Too Large」と表示され実行結果URLが開けない
  結果をHTML形式で表示させるformatterとかがあるみたい。
  でもプレーンテキストでログ確認できるからまあいいかな
  
・実行するノードを分けることのメリット
  mandaの負荷の軽減だけでなくジョブごとに実行環境を分けたいってときに有効。

・ローカルで実行してたときにはおこらなったエラーがいろいろ起こってあせる
  おなじマシンから実行してるわけじゃないので、ファイルへのアクセス権限とかでエラーが見られた
  ⇒ シェルスクリプトに exportでパスを通した

と、実際動かしてみると本には書いてなかったことが沢山おこりました。
でも入門書として手元に置いておくのにはぴったりかなと思います。



jenkinsってよく聞くけど何なんだろう・・・って感じだったのが、だいぶ動かせるようになりました。

ファイルを開こうとしたらシンタックスエラー syntax error near unexpected token `('

コマンドからcatでファイル開こうとしたらシンタックスエラーでた

syntax error near unexpected token `('


原因:linuxはbushを使っているがUbuntuはdashを使っているため上記エラーが出る

解決方法:dashで実行するように変更
変更方法はubuntuの公式ページにいくつかのってる
DashAsBinSh - Ubuntu Wiki



今回はほぼまっさらな環境だったので以下を実行

sudo dpkg-reconfigure dash
このコマンド実行で/bin/sh のリンクを bash に変更

再起動しておわり。

oracle 11gデフォルトパスワードの有効期限切れ ORA-28001: the password has expired

サーバー立ち上げようとしたときある日とつぜんエラーでた

SQLException: ORA-28001: the password has expired


パスワードの有効期限切れとな。。。

単純にパスワードを更新してあげればよいが、また期限切れになると同じエラーが出る。

これを回避するためにoracleのパスワードの期限を無期限に設定しておく。

以下コマンドを実行

alter profile default limit password_life_time unlimited;


postgreSQL コマンドまとめ

postgreSQL コマンドまとめ




<DB定義の変更系>


・型変更
ALTER TABLE <テーブル名> ALTER COLUMN <カラム名> TYPE <データ型>;

・テーブル名変更
ALTER TABLE <変更前テーブル名> RENAME TO <変更後テーブル名>;

・カラム追加
ALTER TABLE <テーブル名> ADD <カラム名> <型情報>;
ex. ALTER TABLE sample_table ADD user_name varchar(255);
ALTER TABLE sample_table ADD address varchar(1023) NOT NULL;
※ 特定のカラムのあとに追加したい場合
alter table <テーブル名> add column <カラム名> after <前のカラム名>;

カラム名変更
ALTER TABLE <テーブル名> RENAME <古いカラム名> TO <新しいカラム名>;
ex. ALTER TABLE sample_table RENAME name TO user_name;]

・カラム削除
ALTER TABLE <テーブル名> DROP COLUMN <カラム名>;

・NOT NULL制約の追加
ALTER TABLE <テーブル名> ALTER COLUMN <カラム名> SET NOT NULL;

・NOT NULL制約の削除
ALTER TABLE <テーブル名> ALTER COLUMN <カラム名> DROP NOT NULL;

・カラムのデフォルト値変更
ALTER TABLE <テーブル名> ALTER COLUMN <カラム名> SET DEFAULT false;

・テーブルの中身を空にする
truncate table <テーブル名>;

・テーブルをDBから削除する
DROP TABLE <テーブル名>;

・DBから全てのテーブルを削除する
drop schema <スキーマ名> cascade;
create schema <スキーマ名>;
※ 全てのテーブルが同じスキーマにあることを前提として、スキーマごとdrop&再作成する操作。


<データの追加・更新・削除>

・データの挿入
insert into <テーブル名> values ('000001', '1971-07-13');

・データの更新
UPDATE <テーブル名> SET <カラム名> = '新しい値' WHERE <カラム名> = '前の値';

・データの削除
DELETE FROM <テーブル名> WHERE price = 10;
ex. sample_tableから'東京'以外を削除する
DELETE FROM sample_table WHERE kind <> '東京';



<確認・集計系>

・テーブル一覧
方法1: select * from <テーブル名>;
方法2: \d (psqlから実行)

・レコード数取得
SELECT COUNT(*) FROM <テーブル名>;

・ 重複を除いてレコード数取得
SELECT COUNT(DISTINCT <カラム名>) FROM <テーブル名>;

・グループごとに集計
select <カラム名>, count(*) from <テーブル名> group by <カラム名>;
ex. 男女別の回答件数を集計
select male_and_female, count(*) from sample_table group by male_and_female;

・ソート
SELECT * FROM <テーブル名> ORDER BY <カラム名> ASC;
ex.SELECT * FROM sample_table ORDER BY user_name ASC, user_id DESC;
※ ASC:昇順、DESC:降順



<psglコマンド>

psglコマンドとは?
PostgreSQL付属のツールで、DBの管理やSQL文の実行ができる"\"から始まるコマンド。

SQL文のヘルプ
\h SQLコマンド名
ex. 「\h select」でselect文の構文が表示される

・指定したファイル内のsqlを実行
\i ファイル名
一度に大量のsqlを実行したい場合にはこちらのほうが便利

・psglを終了する
\q

・DBの切り替え
\c DB名




【参考】
PostgreSQL 9.5.2文書
https://www.postgresql.jp/document/9.5/html/index.html
・データをグループ化して合計や平均を計算
http://www.dbonline.jp/sqlite/select/index14.html

postgreSQLを使ってみよう

postgreSQLを使ってみようの巻。


postgreSQLとは?
- データベース管理システムの1つ。
- タダで使える。
- ネットに情報が沢山あるので勉強するのにいい
- SQL文法が充実

※ セットアップは省略




1.サービスの起動
# service postgresql start


2.ユーザの変更
postgreSQLのDBスーパーユーザであるpostgresユーザで操作する必要があるため。
# su - postgres


3.ユーザーの作成
※ スーパーユーザー以外にもDBを作成できるユーザーを作成する
-bash-3.1$ createuser testuser1
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n


4.DB作成
4-1.一度「su- postgres」を終わってrootに戻るためexitコマンド実行
-bash-3.1$ exit
[root @server1 ~]# su - testuser1
Linux 上のアカウントと PostgreSQL のアカウントが一致しないとエラーになるため

4-2.作成したユーザーでログインし直してDB作成
[testuser1 @server1 ~]$ createdb testdb1
CREATE DATABASE

4-3.作成したDBの確認
[testuser1 @server1 ~]$ psql -l


5.DBへの接続
[testuser1 @server1 ~]$ psql testdb1


6.テーブルの作成
6-1.作成前に現状のテーブル一覧を確認しておく
# \dt
リレーションがありません。 ←まだデーブルがないのでこう表示される
※ 「メタコマンド」といい、psglでDB接続後に実行可能な特有のコマンド。
6-2.テーブル作成
testdb1=> create table tbl1 (
testdb1(> id int primary key,
testdb1(> name varchar,
testdb1(> address varchar,
testdb1(> update timestamp
testdb1(> );
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tbl1_pkey" for table "tbl1"
CREATE TABLE
6-3.作成したテーブルの確認
# \dt

7.データの挿入
csvデータのインポート
- 全てのカラムをインポートする場合
COPY tbl1 FROM '/home/service/hoge.csv' WITH CSV
※ WITH CSV: CSVファイルと認識してカンマ区切りのデータとして扱ってくれる
その他、「HEADER : 1行目を無視する」などoptionがあるので適宜追加して実行
- 一部のカラムをインポートする場合
COPY tbl1(id,title,update) FROM '/home/service/hoge.csv' WITH CSV
・行の挿入
INSERT INTO tbl1 VALUES (1, 'Cheese', 9.99);
※ 一度に大量のデータを挿入する場合はcopyコマンドを使うのが効率的。
本作業ではダミーデータをロードするためcopyを使用する。


8.ダン
$ pg_dump データベース名 > バックアップファイル名
pg_dumpの実体がある場所をフルパスで指定しないとpostgreとpg_dumpのバージョンが違うというエラーが出る
確かバージョン差異を無視するオプションあったはず。それをつければエラーでないかも


9.リストア
$ psql データベース名 < バックアップファイル名




【参考】
CentOSPostgreSQL を使ってみよう!(2)
http://lets.postgresql.jp/documents/tutorial/centos/2
postgreSQL基本操作
http://www.marronkun.net/linux/other/database_000014.html
PostgreSQL 9.3.2文書 COPY
https://www.postgresql.jp/document/9.3/html/sql-copy.html
・PostgresSQLのbackup, restore方法まとめ
http://qiita.com/rice_american/items/ceae28dad13c3977e3a8