ローカル環境作成時:エラー対処集

はじめに

ローカル環境:vagrant + virtualbox仮想マシン(Debian8)

リモートリポジトリをローカル環境で立ち上げようと思った時、いろいろエラーが起きました。

エラーに関する、自分なりの対処法です。

cloneする時:fatal: could not create work tree`

fatal: could not create work tree dir 'kivy'

ディレクトリを作成し、その中でcloneを実行して下さい。 アクセスの権限を変えることでも可能だと思います。

$ mkdir my_git
$ cd my_git
$ git clone git@github.com:_git_name_.git

bundle:”An error occurred while installing mysql2”が起きたら

エラーメッセージに従い、以下で解決しました。

$ sudo apt-get install libmysqlclient-dev
$ bundle

rails サーバー起動する時:  There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)

Gemfileに追記

gem 'therubyracer', platforms: :ruby

Rake aborted, Error while trying to load the gem 'uglifier'

$ sudo apt-get install nodejs

でも解決するならこちらが良いかも(Gemfileを汚さない)。

※nodejsをインストールすると、'uglifier'のエラーは回避できますが、railsサーバー起動時に、ExecJS::RuntimeErrorが出てしまったので、結局、therubyracerの方向で行きました。

rails サーバーを起動する時: Could not open library 'libcurl'

$ sudo apt-get install libcurl3

Could not open library 'libcurl': libcurl: cannot open shared object file: No such file or directory

rails s しても何も表示されない

ターミナル上は起動しているように見えるけど、対象のアドレスにアクセスできない。

$ rails s -b 0.0.0.0

rails sで起動したサーバにブラウザからアクセスできない

mysql: Access denied for user 'root'@'localhost' (using password: NO)

railsのapp作成でmysqlを使用する時の導入とハマるところ rake db:createができるまでの流れ

config/database.ymlにあるファイルにあるパスワードの欄が空白なので自分で値を入れて設定する。

Mysql2::Error: Specified key was too long; max key length is 767 bytes

Rails(ActiveRecord)とMySQLでutf8mb4を扱う設定

ActiveRecordのstring型カラムがvarchar(255)で定義されるので、utf8mb4ではインデックスのキープレフィックスが767byteを超えてしまう。

Railsの設定に関して、

MySQL5.7.9以上を利用しているならdatabase.ymlにおいてutf8mb4を設定すればよく、とくべつなことをする必要はない。

ようなので、MySQLを最新のものに入れます。 (my.cnfへの追記などもしたけど、上手くいかなかった。)

Ubuntu14.04 に mysql 5.6 を再インストールした

mysql-serverの削除

$ sudo apt-get remove --purge mysql-server* mysql-common
$ sudo apt-get autoremove --purge

②APTリポジトリ設定用のパッケージ取得(2017/10月では以下が最新) https://dev.mysql.com/downloads/repo/apt/

$ wget http://dev.mysql.com/get/mysql-apt-config_0.8.8-1_all.deb
$ sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb

リポジトリの更新後、インストール

$ sudo apt-get update
$ sudo apt-get install mysql-server
$ mysql-server --version

現時点では、5.7.19がはいる。

アップグレードするとlibmysqlclient_r.so.16: cannot open shared object file: No such file or directoryみたいなエラーがでるかもしれない。

CentOs 6.4(sakura vps)でMySQLのバージョンを5.6にする

mysql 5.6にアップデートすると、libmysqlclient_r.so.16がlibmysqlclient_r.so.18に変わっていました。

$ gem uninstall mysql2
$ gem install mysql2

で解決する。

Rails サーバー起動時に、自動的にkilledされてサーバーが落ちてしまう。

Why does my WEBrick server get killed?

It runs out of memory. The linux kernel kills it. Droplets don't come with any 'swap' by default, so when the memory gets full, it kills a process or won't let you start a new one. Kinda crazy.

超訳linux kernel はメモリー不足が起きるとkillしちまうのさ!

そうです。 vagrantの設定が問題です。

Vagrant で Virtualbox 仮想マシンのメモリ割り当てを増加させる

$ free -m

このコマンドでわかりますが、vagrantではデフォルトのでは480MBが仮想マシンに振り分けられています。

なので、これを拡張します。

ローカル環境に移動して、Vagrantfileをいじります(以下では参照に従い、1GB 割り当てます)。

コメントアウトしてあった部分を有効化しただけです。

config.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
end

vagrantをリロードして仮想マシンに入ります。

$ vagant reload
$ vagrant ssh

メモリが拡張されていることがわかります。

$ free -m

killedの問題も解決しました。

GitHubへssh接続する

はじめに

参照:Connecting to GitHub with SSH

GitHubへのリモートリポジトリからcloneする時は、ssh keyが必要に成ります。

SSH keys があるかを確認します。

$ ls -al ~/.ssh

この時、下のいずれかが存在すればSSH keysは存在しますが、自分の場合は無かったので新規に作成します。

id_dsa.pub
id_ecdsa.pub
id_ed25519.pub
id_rsa.pub

ssh key を生成します

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

GitHubで登録しているメールアドレスでOK。

Enterを押すといろいろ聞かれます。

・Enter a file in which to save the key (/home/you/.ssh/id_rsa): =>デフォルトの場所にファイル生成してOKなのでEnter!

・Enter passphrase (empty for no passphrase): =>パスワードを適当に入力(接続する時必要なので覚えておく必要はある)

・Enter same passphrase again: =>パスワードの確認

~/.ssh/id_rsaid_rsa.pubが生成されていることがわかります。

③作成したssh keysをGithubに登録する

id_rsa.pubをコピーして、 Personal settings > SSH and GPG keys > New SSH Keyボタン

titleは適当(jassie とか)に、Keyにコピーしたのをペースト。

そして、Add SSH keyボタン。

Debian8にrbenvでRubyとRailsを導入する

環境

以下の環境で行いました。

vagrant

virtualbox

・box-url: https://app.vagrantup.com/debian/boxes/jessie64

Ruby with rbenv

①apt-getをアップデートする

$ sudo apt-get update

②rbenvに必要なものをインストール

$ sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev

③gitもインストール

debian8では、rbenvをgitからcloneします。

$ sudo apt-get install git 

※git-coreはいりません パッケージ: git-core (1:2.15.0~rc0-1)

'git-core' パッケージは 'git' に 改名され、新しいパッケージは自動的にインストールされます。この git-core パッケージは現在は廃止予定で、他のパッケージがこれに依存していなければ システムから安全に削除できます。

④rbenvをクローン

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

⑤rbenvにPATHを通す

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

⑥設定の読み込み

$ source ~/.bashrc
$ rbenv -v

ruby-buildをクローンする

rbenvにinstallコマンドを使えるようにするには、ruby-buildが必要です。

$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Rubyをインストールする

rbenv install -l

でインストールできるRubyのバージョンが表示されます。 今回は、バージョンを2.4.2で指定します。

$ rbenv install 2.4.2

ruby 2.4.2の新しい機能はこちらを参照させていただいてワクワクしましょう。 サンプルコードでわかる!Ruby 2.4の新機能と変更点

⑨rbenvを更新する

rbenvを更新します。

$ rbenv rehash

使用するrubyのバージョンをインストールした2.4.2にします。

$ rbenv global 2.4.2
$ ruby -v

例えば、rubyのバージョンを変更したい場合も簡単に行うことができます。

(ⅰ)rbenv install 2.3.0

(ⅱ)rbenv rehash

(ⅲ)rbenv global 2.3.0

Rails with Gem

①bundlerをインストールする

--no-document をつけないとRDocドキュメントというものが生成されてしまって遅いらしいです。以下のように書き込んでおいて、毎回、--no-documentをするのを避ける作戦。

$ echo "gem: --no-document" > ~/.gemrc

bundlerをインストールする

$ gem install bundler

Railsをインストールする

最新版を入れたければ以下のようにします。

$ gem install rails

バージョンを指定したければ以下のようにします

$ gem install rails -v 4.2.7

③rbenvの更新

$ rbenv rehash
$ rails -v

Railsのバージョンの切り替え

3分でできるRailsダウングレード

$ rails -v
$ gem uninstall rails 
$ gem uninstall railties -v '4.2.1'
$ rails -v
$ gem install rails -v '4.2.0' --no-rdoc --no-ri 
$ rails -v

rubyrailsは関係性が強いので、rubyのバージョンも切り替えたい場合は、railsを消す=>rubyのバージョンを切り替える=>railsを新規に作成する、の順番で行います。

MySQL

MySQLをインストールする

$ sudo apt-get update
$ sudo apt-get install mysql-server
$ mysql --version

MySQL5.5.57が入ります(2017/10月時点)。

より新しいものをインストールしたい場合は、こちらを参照させてもらいます。 (個人的には最新版をおすすめ)

Debian 8 に MySQL 5.7.11をインストール

Mysql特有の操作はこちらを参照 MySQLコマンドまとめ

Vimのインストール

Vim の設定

①普通にインストール

$ sudo apt-get install vim

エイリアス /etc/profile

alias vi='vim'

③設定読み込み

source /etc/profile 

Boxとして保存する方法

再利用するためにboxを保存しましょう。 ローカル環境に戻って作業します。

①パッケージ化

$ vagrant package

package.boxが作成されます。

②Virtual Boxに登録

$ vagrant box add box_name package.box
$ vagrant box list

これで完了。

※再利用する場合

$ vagrant init box_name(さっき保存したboxの名前)
$ vagrant up

※ちなみにboxはここに保存されています。

$ ls /home/user_name/.vagrant.d/boxes/

参照

How To Install Ruby on Rails with rbenv on Debian 8

kulkuをひと通り使ってみた

使用環境

chrome

firefox

kulku

kulku - 迷わない道案内を簡単に作る

改善案

①削除ボタンの必要性

作成した道案内に関しては、”内容変更”ボタンはあるけれど、削除ボタンはありません。 必要だと思います。

②登録している道案内の内容変更で写真を全て削除して、再アクセスするとエラーがでる

これは、写真を全て削除するとデータベース上は消えているけど、View上は消えていないのでエラーが出てしまっているのではないかと推測します。

③ヒトアイコンが連動しない

kulkuの道案内の画面では左がヒトのアイコンをクレーンで動かす画面、右がgoogle mapとなっていると思います。 google mapで動かすと、ヒトアイコンは画面からきれて居なくなってしまいます。

④検索に出発地点が引っかからない問題

これは、あえてそうしているんだと思いました。 自分もよく考えると、目的地のみ引っ掛けたほうが良いきがします。報告まで。

感想

最初の10分位は使うのにまごつきました。 個人差はあると思いますが、クレーンで動かそうとすると、動きすぎてしまって上手く操作できませんでした。 なので、自分はgoogle map上で移動を主にするようにしました。 操作は直感的にできました。田舎の絶景スポットとか、心霊スポットとかと相性が良さそうですね。

改善案に対して自分でできること

①削除ボタンの必要性

削除ボタンを作ってデータベースから消して、Viewのリスト上から消すということをjavascript側でやれば良いと思います。

②登録している道案内の内容変更で写真を全て削除して、再アクセスするとエラーがでる

道案内の写真を全て削除した時点で、View上のリストから削除するれば良いと思います。

怖話をひと通り使って、感想と自分が対応する場合の改善策をブログに書く

※10/14にアンドロイドで使って見た後、記事を加筆・訂正しました。

使用環境

firefox

chrome

・アンドロイド

怖話

kowabana.jp

を書きました。 反省点は恐くないということです(努力はした!)。

改善案

怖話を使ってみて感じたことを書きます。

投稿に関して

①”BGM挿入”、”効果音挿入”をつけることができなかった。

ChromeFirefoxの両方で試しましたが、下書きの時も、投稿時も音は反映されていませんでした。 その他の、”背景画像挿入”、”画面を揺らす”、”改ページ”は下書き時、投稿後も機能していました

※説明文を読んでいなかった。現時点(10/14)では、デスクトップでは音楽が再生されず、携帯電話では再生されるのが正常なようですね。アンドロイドでは正常に音声が再生されていることを確認しました。

②空白行が無視される

投稿時に例えば、

扉を開けると女が立っていた。

”だぁれだーーー!!”

太郎は逃げた。

といように、行と行の間にスペースを開けたいときはあると思います。 実際に投稿時に上記のように入力しても空白行は無視され、以下のように表示されます。

扉を開けると女が立っていた。
”だぁれだーーー!!”
太郎は逃げた。

投稿者は抑揚をつけるために空白行は使いたいと思うので解決できたらいいと思いました。

③改ページを押す度に現在位置が上にスライドする

投稿する際に、”改ページ”はよく使うと思うのですが、”改ページ”を押すたびに、書いていた地点よりも上にスライドするので、毎回スクロールダウンしないといけませんでした。

④投稿した作品を編集した後に投稿する時のボタンの表示が誤解をまねくかもしれない

怖い話を新規に登録する時:”利用規約に同意して公開”

編集して再投稿する時:”利用規約に同意して公開”

と同じなので、編集した後、”利用規約に同意して公開”を押すと今までの”恐い”カウントなどがキャンセルされてしまうのではないかと思ってしまうかもしれない(実際はそうはならない)。

なので、編集して再投稿する時は、”編集完了”などボタンの表示を変えた方が良いように感じました。

説明文がないもののまとめ

wafflebotでは一部指摘されていましたが、説明文がないものをあらためてピックアップしておきます。

・怖い話の”特選”

・都市伝説

・ホラー漫画

心霊スポットに関して

①入力フォームが誤入力を引き起こしやすいかもしれない

理由

・投稿されている心霊スポットのいくつかは海の上を指している(入力ミスしたと思われる)

・自分自身、経度・緯度の入力に慣れていないので、心霊スポットの登録がおっかなビックリだった。

現在、入力フォームは以下のようになっています。

f:id:taiki44no:20171009120729p:plain

心霊スポットを投稿しようとする際に、情報を入力するときに、多くの人はgoogle map から必要な情報をこのフォームにコピペすると思います(僕はそうしました)。

f:id:taiki44no:20171009134409p:plain

google mapではちなみにこんな感じで、経度、緯度が表示されています。 左に経度、右に緯度です。

理想的には、google map の地図が表示されて、そこをクリックしたら、住所も、経度も、緯度も入力不要という感じがいいと思います。

簡易的に改善するなら経度と緯度をgoogleの表示と同じように、縦ではなく、左、右の関係で表示する方がご入力は少なくなるのではと推測します。

②ある住所からの近い順に心霊スポットをソートする機能がほしい

心霊スポット巡りをする方が一番欲しい機能がなにかと思った場合、

”自分の住んでいる地域の近くに心霊スポットはあるかしら?”

ということじゃないかと思います。

なので、ある住所からの近い順ソートはあったら便利だなぁと感じました。

アンドロイド版

ナビゲーションヘッダーについて

アンドロイド版のナビゲーションヘッダーは左側から、 ”ホーム””アワード””ニュース””怖い話””怖話オブザイヤー””都市伝説”、、、、と並んでいますが、 例えば、右にナビゲーションヘッダーをスクロールして、都市伝説をクリックすると、 ナビゲーションヘッダーは、一番左のホームに戻る。

ナビゲーションヘッダーの都市伝説をクリックしたら、一番左に戻るのではなくその場にとどまったほうがつかいやすいのでは ないかと感じた。

感想

ユーザ登録する際に、ホラー系のアイコン画像が並んでいたのは笑ってしまった。 こういうユーザを自然に世界観に参加させる仕組みはおもしろいと思いました。

改善案に対して自分でできること

(ⅰ)投稿に関しての、”④投稿した作品を編集した後に投稿する時のボタンの表示が誤解をまねくかもしれない”はボタンの表示を変えるだけなので、必要であれば出来ると思った。

(ⅱ)心霊スポットの、”①入力フォームが誤入力を引き起こしやすいかもしれない”での、入力フォームの配置変更くらいはできると思った。

(ⅲ)心霊スポットの”②ある住所からの近い順に心霊スポットをソートする機能がほしい”は、経度・緯度から距離順にソートすることを実装する点に関しては問題なく出来ると思った。ただ、その表示の仕方に関してはいろいろと難しいところもあるように思います。

既存のGistをターミナルからアップデートする。

前提

GitHubアカウントを持っている。

GitHubでgistを作成し、存在する。

・gemがインストールされている。

※ちなみにgistをpublicで生成してもURLを知っていれば見えてしまうので注意しましょう。 参照:Private Gist の注意点

今回はGitHub上に以下のようなhello.txtがあるとします。

そして、ローカルにクローンした後、編集して、GitHub上のgistにアップデートしたい場合を想定します。

hello

実践

step1: gem gistをインストールする

$ sudo gem install gist

step2: gistをクローンする

$ git clone https://gist.github.com/_your_gist_.git

ローカルで編集します。

hello.txt

hello from local!!

step3: GitHubへログイン

$ gist --login

step4:アップデートする

$ gist -u https://gist.github.com/_your_gist_id_ hello.txt 

GitHub上にアクセスすると、hello.txt

hello from local!!

に更新されていることがわかります。

※新規で作る場合は -u(update)のオプションをとって次のように行います。 new_file.txtGitHub上のgistに送りたい場合はこれだけでOKです。

gist new_file.txt

参照

ターミナルからGistに投稿