2017/07/21

Laravel 5.1 の quickstart を Laravel 5.4 で実行する

Laravel には tutorial 的な quickstart があるのですが、ドキュメントは 5.1 までしか提供されていない。
5.4 の tutorial 的なものは laracast という形で動画で提供されています。
動画を見てコードを書くのが性に合わなかったので 5.4 で 5.1 の quickstart をやってみたログ。
ちなみに作るものは所謂 TODO リストというやつで、よくチュートリアルで作るやつですね。
index, create, delete があるだけ、って感じ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • PHP 5.6.30
  • Laravel 5.4.22
  • Apache httpd 2.4.26


5.1 -> 5.4 変更点

具体的な変更点は実は1つしかなくて、Routing の `app/Http/routes.php` の内容を `routes/web.php` に置くだけ。
どうやら Laravel 5.4.22 は api/web/console/channel ごとに routes を分けられる構成になっているっぽい。
書いてて思ったけれど割とモダン。
OR-mapper も extends するだけて使えるタイプっぽいし。
個人的には Routing 部分に処理が出てきたりするのは Sinatra っぽいな、と感じました。
あと html template の名前が blade でかっこ良い。が、宿命的に書きづらい。
ということで作った Repository はこちら。5.4 環境でも何ら問題無く動きます。



Apache 2.4.26 で動かす

Apache 2.4.26 で動かすためには `public` を DocumentRoot にする必要があります。
例えば
DocumentRoot "/home/atton/quickstart/public/"
<Directory "/home/atton/quickstart/public/">
とか。 permission もきちと整えておくこと。
あと DirectoryIndex は index.php にしておいた方が良いかも。
それと AllowOverride All と Requite all granted を書いておくこと必要があります。
加えて LoadModule rewrite_module modules/mod_rewrite.so をコメントインしておく。
.htaccess とかは Laravel が用意してくれるので問題無し。

さらに言えば、使うDatabase が MySQL なら MySQL の PDO が必要なので ./configure の段階で
  • ./configure --with-openssl --with-zlib --enable-mbstring --enable-zip --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
とかしておく必要があります。つまり前記事の段階ではオプションが足りていなかったってことですね。
ということで 5.1 の quickstart を 5.4 で動かしたログでした。


参考

2017/07/18

ActiveLDAP が Timeout Module を使っていた

かなり前の記事になりますが、ActiveLDAP が Process.fork を使っているせいで PostgreSQL との相性が悪いバグがありました。
具体的には Timeout を指定すると fork したプロセスを使って Timeout を確認しているせいで pg の connection を使いはたしてしまう、というのが原因でした。

本当に具合が悪い時は Ruby がコアダンプを吐いて死ぬ時もあったので、直してしまってRuby会議2017のLTネタ にでもしようと思って調査を続行。
最新版では再現しないのでソースを読んでみたらそもそも Process.fork をしていない。
Timeout というものに block を渡している
なんと Timeout なる Module があるようで、それに時間の処理を一任しているようです。

Timeout Module 知らなかった。
Timeout の処理って面倒なので自分が次に Timeout の処理を書くことがあったら使おうと思いましたまる。
ソース読むのはおもしろかったけれどネタが無くなってしまったな。どうしようかな。

2017/07/13

Scientific Linux 7 に NeoVim を入れる

これまたタイトル通りの作業ログ。
CheckHealth が通る NeoVim にプラグインを入れるまで。

環境

  • Scientific Linux release 7.3 (Nitrogen)
  • NeoVim 0.1.7


インストール方法

NeoVim 公式ドキュメントを見るとどうやら epel から入れられるっぽい?
  • # yum -y install epel-release
  • # curl -o /etc/yum.repos.d/dperson-neovim-epel-7.repo https://copr.fedorainfracloud.org/coprs/dperson/neovim/repo/epel-7/dperson-neovim-epel-7.repo
  • # yum install --enablerepo=epel jemalloc
  • # yum -y install neovim
で NeoVim 0.1.7 が入った。


CheckHealth を通す

どうせなので CheckHealth が通るように gem とかを入れる。
  • # yum --enablerepo=epel install -y python-neovim msgpack msgpack-devel ruby ruby-devel python2 python2-devel python34 python34-devel python34-pip
  • # gem install neovim
  • # easy_install pip
  • # pip install neovim
  • # pip3 install neovim
これで CheckHealth で怒られなくなった。


dein.vim を入れる

NeoVim に移った際にプラグインマネージャを dein に変更したのでそれのインストールも。公式の通り
  • $ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
  • $ sh ./installer.sh ~/.config/nvim
としておしまい。
あとは :call dein#install() として他のプラグインをインストールして環境構築完了、と。

2017/07/12

PHP 5.6.30 + Laravel 5.4 の環境を整える

タイトル通りな環境を作った時のログ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • composer 1.4.2
  • PHP 5.6.30
  • Laravel 5.4


PHP の再ビルド

最初からネタバレ全開でいくと、前回入れたPHPでは Laravel は動きません。
openssl や zlib や mbstring や zip が必要らしい。なので正解な最小の config は
  • ./configure --with-openssl --with-zlib --enable-mbstring --enable-zip --with-apxs2=/usr/local/apache2/bin/apxs
っぽい。こいつで再 make + make install



Composer を入れる

Laravel 公式の Installation を見ると composer という package manager を使うと良いらしい。
書かれている通りに
  • $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  • $ php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
  • $ php composer-setup.php
  • $ php -r "unlink('composer-setup.php');"
とすると composer.phar なるファイルが直下にできる。
これが package manager の実行ファイルっぽい。
適当な場所に放置して大丈夫かと思っていたら /usr/local/bin とかに置くと良いっぽい。
  • # mv composer.phar /usr/local/bin/composer
これで package manager が入った。


Laravel を入れる

composer が入ったのであとは
  • $ composer global require "laravel/installer"
する。
ログに "Changed current directory to /home/atton/.config/composer" とか出ているので config は $HOME/.config/composer あたりに書かれるらしい。
その下を漁ってみると .config/composer/vendor/bin に laravel があるのを発見したので
  • export PATH=$HOME/.config/composer/vendor/bin:$PATH 
とかして PATH に追加。これで laravel が使えるようになった。試しに
  • $ laravel new blog
すると blog が生成されたので動いているっぽい。


参考

Apache Solr 6.6 を Scientific Linux 7.2 にインストールする

表題の通り。インストールしたログです。あとちょっと遊んだログ。


環境

  • Scientific Linux release 7.2 (Nitrogen)
  • Apache Solr 6.6


インストール

  • # yum install -y java
  • # wget http://ftp.jaist.ac.jp/pub/apache/lucene/solr/6.6.0/solr-6.6.0.tgz
  • # tar xzf solr-6.6.0.tgz
  • # solr-6.6.0/bin/install_solr_service.sh solr-6.6.0.tgz
でおしまい。service にも systemctl にも登録されている。便利。


チュートリアル

QuickStart が用意されているので遊んでみる。
xml とか json とかのデータを食わせることができて、それらを検索できるっぽいです。
  • # systemctl start solr
しておいて
  • $ /opt/solr/bin/solr create -c gettingstarted
とかでコレクションを作る。コレクションに情報を集約する感じかな。
ちなみに root で bin/solr create とかすると怒られる。
su - solr するとデータのディレクトリとかがあるので、ここにデータが入るのだろう。

QuickStart を参考に
  • /opt/solr/bin/post -c gettingstarted /opt/solr/docs
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/*.xml
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/books.json
  • /opt/solr/bin/post -c gettingstarted example/exampledocs/books.csv
とかでデータを食わせる。食わせたデータは RESTful に検索できるとのこと。

ということでいろいろと検索してみる。
  • $ curl "http://localhost:8983/solr/gettingstarted/select?indent=on&q=*:*&wt=json"
    • でとりあえず何にでもマッチするクエリを投げる
    • 検索は key:value ってフォーマットらしい
    • なので *:* はなんでもマッチする感じですね
  • $ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation"
    • で "foundation" を含むデータを探す。
    • 返ってくるデータの形式は json
    • たぶん json 以外にも対応している
  • $ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation&fl=id"
    • 返すフィールドを id のみに制限。
    • fl が field の略か。
とかとかいろいろあるらしい。

ブラウザからもアクセス可能でその場合はデフォルトだと 8983 番で listen している。
マルチバイト文字の扱いが地味に気になるがその辺りも対応しているのなら便利そうだ。
でも始めて聞いたな Solr 。界隈では有名なのだろうか。


参考