sandbox-memo

開発してて出たエラーをメモる場所

rake db:createしようとしたらエラーが出た①

qiita.com

のデータベースの作成のとこでつまずき。

rake db:create:all

したらエラーが出て

You have already activated rake 12.3.0, but your Gemfile requires rake 12.3.1. Prependingbundle execto your command may solve this.

と言われてしまった。

Gemfileが要求してるrakeのバージョンとローカルでつかってるrakeのバージョンが違うらしい。

bundle execつけて実行したら解決するかも、って書いてあるのでつけてみたけどやっぱりダメ。

Gemfileの方のバージョン指定を外せばいいかとおもってファイルみてみたけどrakeの記述がどこにもなかったのでわからず。 仕方ないのでローカルのrakeのバージョンをあげてあげることに。

gem uninstall rake --version 12.3.0

gem install rake --version 12.3.1

で対応し、 gem list rake したら無事12.3.1になった。

vagrant synced_folderをnfsモードにしようとしたらエラー出た

qiita.com

を見ながら環境構築してたらエラーでたのでメモ。

config.vm.synced_folder ".", "/vagrant", type: "nfs"

vagrant reload

したら

NFS requires a host-only network to be created.
Please add a host-only network to the machine (with either DHCP or a
static IP) for NFS to work.

って言われた。

host-only networkってつまりprivate networkっぽかったので

# config.vm.network "private_network", ip: "192.168.33.10"

コメントアウトを外した。

もっかい vagrant reload したら問題なく進んだ。

sinatraつかってみようと思ったらエラー出た

qiita.com

の記事を参考にsinatraのインストールからハロワまでやってみようとしたらエラーが出た。

#myapp.rb
require 'sinatra'
require 'sinatra/reloader'
get '/' do
    "Hello world " 
end

ってのつくって、ruby myapp.rb したら

/Library/Ruby/Site/2.3.0/rubygems/core_ext/kernel_require.rb:59:in `require': cannot load such file -- sinatra/reloader (LoadError)
    from /Library/Ruby/Site/2.3.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    from myapp.rb:2:in `<main>'

といわれる始末。

なんかライブラリがおかしいっぽいので、 bundlerつかって環境をやりなおすことに。

Gemfileつくって

gem "sinatra"
gem "sinatra-contrib"

追記してbundle installして、もっかい ruby myapp.rb したらうまくいった。

Keystone JSをCloud9で試すメモ

Wordpress以外のいいかんじのCMSないかなーとおもっていたらKeystone JSというのがよさげだったので試してみたメモ。 環境はCloud9でござる。

参照したページ

セットアップは超簡単。 KeystoneJSとYEOMANとmongoDBの各公式ページをみて、書いてあることを実行するだけでOK。

keystonejs.com

Getting started with Yeoman | Yeoman

Install MongoDB Community Edition on Amazon Linux — MongoDB Manual

セットアップ手順

もっかいやるときのために残しとく。

Cloud9で新しい環境を追加

※貧乏性にかられてt2.nanoで立てたみたら、かなり厳しかった。 KeystoneJSのSign inとか管理画面の表示でタイムアウトしちゃうレベル。 t2.smallにしたら一応触れるレベルにはなったので少なくともt2.small以上にしたほうがよい。

KeystoneJSいれていく

KeystoneJSのGet Startedにしたがって上からやっていく

npm install -g generator-keystone
mkdir my-test-project
cd my-test-project
yo keystone

ここで200%くらいの確率で yo command not found と言われるので

npm install -g yo
yo keystone

でyoをいれてから実行してあげる。 yeomanっていうビルドツールなんだそうな。

実行すると、「サイト名何にする?」「スタイルガイドはなにつかう?PUG?」とか聞かれるので適当にエンターまたはYを押していく。

適当にこたえるとmy-siteというディレクトリができるので

cd my-site

で移動し、

node keystone

とやると、 Error: Cannot find module 'keystone' とか言われる。

理不尽すぎて悲しくて面倒なので、

npm install -g npm-install-missing
npm-install-missing

とやって、足りないモジュールを一括で適当にインストール。 cloud9で試すだけだから細かいことは気にせず男気で押し切っていく。

んで、もっかい

node keystone

をしたら、今度はこんなエラーに。

Mongoose connection "error" event fired with:
{ MongoError: failed to connect to server [localhost:27017] on first connect
    at Pool.<anonymous> (/home/ec2-user/environment/my-test-project/my-site/node_modules/mongodb-core/lib/topologies/server.js:326:35)
    at emitOne (events.js:96:13)
    at Pool.emit (events.js:188:7)
    at Connection.<anonymous> (/home/ec2-user/environment/my-test-project/my-site/node_modules/mongodb-core/lib/connection/pool.js:272:12)
    at Connection.g (events.js:292:16)
    at emitTwo (events.js:106:13)
    at Connection.emit (events.js:191:7)
    at Socket.<anonymous> (/home/ec2-user/environment/my-test-project/my-site/node_modules/mongodb-core/lib/connection/connection.js:175:49)
    at Socket.g (events.js:292:16)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at emitErrorNT (net.js:1290:8)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
  name: 'MongoError',
  message: 'failed to connect to server [localhost:27017] on first connect' }
Error: KeystoneJS (My Site) failed to start - Check that you are running `mongod` in a separate process.
    at NativeConnection.<anonymous> (/home/ec2-user/environment/my-test-project/my-site/node_modules/keystone/lib/core/openDatabaseConnection.js:59:10)
    at emitOne (events.js:96:13)
    at NativeConnection.emit (events.js:188:7)
    at Immediate.<anonymous> (/home/ec2-user/environment/my-test-project/my-site/node_modules/mongoose/lib/connection.js:296:19)
    at runCallback (timers.js:672:20)
[mongodb-org-4.0]
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)

mongoがいなくてンゴってなってるので Install MongoDB Community Edition on Amazon Linux を 参考にmongoDBをインストール。

sudo vi /etc/yum.repos.d/mongodb-org-4.0.repo

.repoの中には以下をコピペ。

[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

以下でインスコ&mongoDB起動。

sudo yum install -y mongodb-org
sudo service mongod start

無事にmongoDBを起動できたので、

node keystone

をもっかいやると、

KeystoneJS Started:
My Site is ready on http://127.0.0.1:8080

という感じで、KeystoneJSが動いた。

Cloud9→PreviewPreview Running Applicationってやって、アプリケーションにブラウザからアクセスしてみると

f:id:aktkro:20180702011522j:plain

というかんじ。

どうみてもTOPページです。本当にありがとうございました。

macでzcatコマンド叩いたらエラーになった

zcat hoge.sql.gz | mysql -h 127.0.0.1 -u root -p hoge_local

といういつものコマンドでgzipをDBにインポートしようとしたら、

zcat: can't stat: hogesql.gz (hoge.sql.gz.Z): No such file or directory というエラーになった。

いや、No such file or directoryっていわれても・・・ファイルあるし・・・

困っていたら 「 gzcat でやってみたら?」 というアドバイスをもらったので

gzcat hoge.sql.gz | mysql -h 127.0.0.1 -u root -p hoge_local

で実行。 そしたらなんかいけた。謎。

PWAに対応してるサービスまとめ

スマホの空き容量がない民の自分には、PWAがめっちゃ便利。 日本向けのサービスでPWA対応してるやつメモ。

MAP

ESTATE

SNS

TRAVEL

MEDIA

undefined method `strftime' for nil:NilClassといわれた

herokuにスケジュールアプリを載せるべく、時刻を表示しようとしたら

f:id:aktkro:20180506122252p:plain

なぞのエラーになってしまった。

heroku logs -t

してみたら

ActionView::Template::Error (undefined method 'strftime' for nil:NilClass):

だそうな。

要素がnilなものに対してstrftimeはつかえないってことらしい。

というわけで該当箇所を以下のように書き換えた。

# 変更前
        <%= post.time.strftime('%H:%M') %>
# 変更後
<%= 
        if post.time.present?
            post.time.strftime('%H:%M')
        else
            nil
          end
        %>

nil?とかempty?でもできるけど正常系の処理を先に書きたいからとりあえずpresent?にしといた。 そもそもカラムをNULL許容にしなければいいんだけど、任意項目だからしゃーなし。

もっとスマートなやり方があるとおもうけどまあ素人なのでこれでいいかな。