mozyのかきおき

mozyの読書感想文や思考置き場

【解決】gem install pg でコケる

起きたこと

$ bundle install 時に、

An error occurred while installing pg (1.0.0), and Bundler cannot continue.
Make sure that `gem install pg -v '1.0.0' --source 'https://rubygems.org/'` succeeds before bundling.

てな感じのエラーが出た。

よく見ると、

No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

というエラーが出ていて、libpq-fe.hに関して調べるとpostgresql関連のファイルだった。

解決策

Macだったため、
$ brew install postgresqlをして解決。

【解決】docker-compose down したら mysqlのデータベースの内容が消えたりする

起きたこと

dockerでmysqlのコンテナを立ち上げて、その中にデータを書き込んでいたりした。
その後、docker-compose down したら書き込んでいたデータが消えた。
docker-compose.ymlでは

volumes:
      - ./var/lib/mysql:/usr/local/var/mysql

のようにカレントフォルダ以下の var/lib/mysql を使うように設定していた。

解決策

原因

単に、docker-compose.ymlにMYSQL_DATABASE: "dev" などと記載するのを忘れていただけだった。笑

違った。単に、docker上の/usr/local/var/mysql と接続していなかっただけだ。

volumes:
      - ./var/lib/mysql:/usr/local/var/mysql

/usr/local/var/mysql ではそりゃデータ入らないわ 笑

その他

./var/lib/mysql 以下にデータベース関連のファイルがないので、docker上のmysqlで使えていなかっただけだったようだ。
テーブル名.frm (テーブル定義ファイル)などが存在していれば問題なし。

【解決】dotenvとridgepoleを組み合わせて使う際に、ridgepole実行時に、dotenvが展開されずエラーが起きる【rails】

起きたこと

rails のプロジェクトを作成し、databaseのマイグレーション周りに ridgepole を使おうとして以下のようなエラーが出た。
passwordなどの環境設定はきちんと渡しているのになんでエラーなのかなぁとハマっていた。

$ bundle exec dotenv ridgepole -c config/database.yml -E development --apply -f db/Schemafile
[ERROR] Access denied for user 'mozy'@'localhost' (using password: NO)
    /Users/mozy/hoge/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:90:in `connect'

環境変数を以下のようにdotenvにまとめていた。
.env

DATABASE_HOST=127.0.0.1
DATABASE_PORT=3000
DATABASE_USERNAME=root
DATABASE_PASSWORD=pass
DATABASE_NAME=database_dev

解決策

ridgepoleの実行時には、dotenvが展開されていないようでエラーが起きていた模様。

以下のように、dotenv -f ".env" というように即時展開するオプションがあったのでそれを使うことで.envの設定を渡すことができた。
一件落着。

$ bundle exec dotenv -f ".env" ridgepole -c config/database.yml -E development --apply -f db/Schemafile

参考

GitHub - bkeepers/dotenv: A Ruby gem to load environment variables from `.env`.

GitHub - winebarrel/ridgepole: Ridgepole is a tool to manage DB schema. It defines DB schema using Rails DSL, and updates DB schema according to DSL. (like Chef/Puppet)

【解決】Hexo でserveなどができないエラー

起きたこと

$ hexo s などとすると、

Error: EISDIR: illegal operation on a directory, read
ERROR Plugin load failed: hexo-server

などのエラーが出て動作しないことがあった。

解決方法

npm install していたpackageが認識されていないのが問題のようだ。
yarn install をすることで解決した

Laravelで新規プロジェクトを最速で作る

やること

Laravelで新規プロジェクトの設定を忘れるのでメモ.

手順

baseプロジェクトをクローン
composer install
php artisan key:generate
.envファイルの設定にしたがってmysqlなりでdbを作成する。
databaseのエンコーディングはutf8mb4なりにして置くと良いかも
migrate ファイルを作成して
php artisan migrate
php artisan db:seed
でデータが入る。

Rails で新規プロジェクトを最速で作る

経緯

いつも忘れるので、自分の環境で最速でRailsプロジェクトを作るためのメモを残す

やること

  • ディレクトリ作成
    mkdir test
    cd test

  • direnvで環境を固定
    direnv edit .

use ruby 2.5
  • Gemfile作成してbundle install
    vim Gemfile
source "https://rubygems.org"

gem "rails", "5.2.0"

gem install bundle
bundle install --path vendor/bundle

  • railsプロジェクトを作成してスタート
    rails new .
    rails s

  • 表示確認
    http://localhost:3000/ をみにいく。
    Yay! You’re on Rails!

npm で バージョンを固定する

知ったこと

—save-exact を使うとバージョン固定できる。

以下のように使う。

`npm install --save --save-exact <packag-name>`