indilog

Ruby/Rails/React/Goなどに関して自分が勉強したことなどを投稿しています

itamaeでsidekiqが使えるようにredisをremiからインストールする

問題

railsでActionCableを使ってアプリを作っていて、ActiveJobを処理させるためにsidekiqを導入しようとしたら、 epel だとredisのバージョンが足りなかった。 github.com

# recipes/redis.rb

package "redis" do
  options "--enablerepo=epel"
  action :install
end

service "redis" do
  action %i(enable start)
end

解決

remi から取ってくるようにするために、レシピを以下のように変更。

# recipes/redis.rb

package "epel-release" do
  action :install
end

package "http://rpms.famillecollet.com/enterprise/remi-release-#{node[:platform_version][0]}.rpm" do
  not_if "rpm -q remi-release"
end

package "redis" do
  options "--enablerepo=remi"
  action :install
end

service "redis" do
  action %i(enable start)
end

これでうまくsidekiqが起動、処理してくれるようになった🔪🔪🔪

gretelって名前がメルヘンだけどパンくずリスト作りに便利

パンくずリストの実装って結構面倒くさそうだなって思ってたけど、gretelはなんて素敵gemなんだろうと思った。 github.com

使ってみた

READMEにもかいてあるけど、おもむろに

Gemfile

gem "gretel"

と書いて bundle install

次に設定ファイルを rails generate gretel:install で生成。

生成される config/breadcrumbs.rb に対して色々と設定を入れていけば良い感じ。

config/breadcrumbs.rb

# ページのルート
crumb :root do
  link <表示させたい文字列>, root_path
end

# 以下みたいなのをパンくずリストに表示させたい塊に対して書く
crumb :<パンくずのシンボル用文字列> do
  link <表示させたい文字列>, <リンク先パス>
end

のように記述する。

あとは各ページに対して

<% breadcrumb :<パンくずのシンボル用文字列> %>

パンくずリストを表示させたい箇所で記述するのと、

app/views/layouts/application.html.erb

<%= breadcrumbs style: :bootstrap" %>

と書いてしまえば bootstrap スタイルの素敵なパンくずができちゃいます。便利ですね!

React&React Native入門者の会に参加してきた

React&React Native入門者の会というものに参加し、面白そうだと思ってたけど全然触れてなかったReactについて色々と話を聞いてきたので雑まとめ。

Reactive Nativeのおかげで爆速でNativeアプリが書ける話 @prologさん

http://snack.to/bhclvf3k

アンドロイドアプリ作りたい

  • 豊富なライブラリ
  • awesome-react-native
    • react-native-grifted-chat ➡︎ LINE風のチャットが実装できる
    • react-native-action-button
    • react-native-dialogs

Reactの基礎 @minakaco0301さん

https://github.com/minakaco0301/react_native_sample


React Nativeを触り始めて@diskshimaさん

  • ListViewあるあるらしい

  • 更新されない場合はCloneWithRawsを呼びましょう


React JSのオープソースを学び倒して脱初心者を目論んでいる話 @tkow39

  • リアルなコードを書こう
  • fillはfluxの良い実装

Ajax in React with axios @takanorip

Reactでpromiseなajax


感想

  • 全体的に、名前の通り入門者レベルの話だった気がした。
  • とりあえずawesome-reactとかのプロジェクトを色々コードリーディングしていって、知識を取り入れられたらと思った。

【Rails】guard-livereloadを使ってみる

きっかけ

ReactJSの開発環境を設定している動画で、livereloadでサクサク開発をしているのが紹介されているのを見て、面白そうだなと思ってやってみました。

guard-livereload

github.com

RSpecとか更新時に色々と自動化してくれるやつのlivereload版。 viewファイルやCSSやJSなどといったファイルが更新された際に自動的にブラウザをリロードしてくれる。

インストール

Gemfile

group :development do
  gem "guard-livereload"
end

と書き、

bundle install

でインストール。

guard init livereload

でどのファイルを更新した時にリロードするのかといった設定を書くためのGuardfileを生成。 中身としては

# file needing a full reload of the page anyway
watch(%r{app/views/.+\.(#{rails_view_exts * '|'})$})
watch(%r{app/helpers/.+\.rb})
watch(%r{config/locales/.+\.yml})

などといったwatch~~な箇所が更新されたらリロードがされるようにデフォルトで生成されるファイルでは記述されている。

連携

chromeを使っているなら下から拡張機能をインストール。 chrome.google.com この状態で

bundle exec guard

を実行すると

INFO - LiveReload is waiting for a browser to connect.

という表示が出るので、

rails s

でサーバを立ち上げて、ブラウザでアクセスすると

INFO - Guard is now watching at [project名]

となり、これ以降にviewファイルなどを更新すると、自動的にリロードされるようになる。

Support

Guard::LiveReload is looking for a new maintainer. Please contact me if you're interested.

なんて書いてあって少し不安感あるけど、他にサクッと入れられるものはあるのだろうか。

【Rails】Time型で時間の条件だけを指定して取得

DBはSQLite3を使用

問題

id: 1, starttime: 2000-01-01 10:00:00 +0900
id: 2, starttime: 2000-01-01 10:00:00 +0900 

このようなレコードがあった時に

Model.where(starttime: Time.parse("2000-01-01 10:00:00 +0900"))

ではid: 1のみの取得となってしまった時があった。

調査

Model.find(1).starttime.to_i
=> 946688400

Model.find(2).starttime.to_i
=> 946688400

は両方同じものが返ってくる。 ということはDB側で値を比較する際に何かが起きている?

解決

とりあえずこれを

Model.where("time(starttime) == ?", Time.parse("2000-01-01 10:00:00").strftime('%H:%M:%S')) 

と記述して、DB側で文字列化し、比較することによって両方とも取得ができた。 でもこれってDBの種類によって挙動が変わる可能性ないのかな?まだまだ調査が必要が感じがする。