XPath で自分自身の親ノードを指定する方法

XPath

XPath 自体はこちらのページこちらのページなどをご覧ください。たぶん私が説明するより明瞭です。

今回は単に XPath でのノード指定の方法のうち、親ノードを指し示す方法を書きます。

親ノードの指定方法

とは言え簡単です。ディレクトリの指定と同じです。たとえば、//aというノードの親ノードは//a/..になります。これだけです。あるノードを含む HTML のソースコード自体を取得したい場合などに活用できるのではないでしょうか*1

*1:ノード指定自体ではその中身しか取得できないような場合

Capybara の all メソッド(find_all メソッド)で正規表現を使うときの注意点

Capybara

Ruby で Web スクレイピングをする際はCapybaraという選択をする場合が多いと思います。その際、Capybara の all メソッド(find_all メソッド)で正規表現を使って抽出をするときの注意点です。

オプションの引数として:textを用いるとき

ドキュメントにもあるように、引数として:textを使うのは分かると思います。そして取りうる値は「文字列」または「正規表現」です。この「正規表現」を取るときの記述方法が問題となります(なりました)。

正規表現はクォーテーションでくくらない

正解から示すと、以下のように書かないといけません。

page.all('a', :text => /ruby/)

そうです、クォーテーションで正規表現をくくってはいけません。これで数時間ハマりました……。

GitLab が 502 エラーで起動しないとき

GitLab が 502 エラーで起動しない

GitLab をがんばってインストールして喜び勇んで起動してアクセスしても、延々と 502(Bad Gateway)エラーが出てログイン画面にたどり着けない場合があります。そのときの対応方法の一つです。

まずは待つ

単に起動準備中でまだアプリの用意ができていない場合に 502 が出ます。大半はこれかなとは思います。

socket ファイルの不備(socket ファイルが不要)

いくら待っても 502 の場合には次も疑ってみてください。

gitlab.socket が不適切に残っていないかどうか

gitlab.socket ファイルのありかは/var/opt/gitlab/gitlab-rails/sockets/gitlab.socketです。さっそくチェックしましょう。

# ls -la /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket
srwxrwxrwx 1 git git 0 Nov 14 20:54 /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket

妙に昔の日時のまま残っていたら怪しいです。GitLab を一度止めてから当該ファイルを削除しましょう。そして GitLab を再起動しましょう。場合によってはgitlab-ctl reconfigureもしましょう。

# gitlab-ctl stop
# rm /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket
# gitlab-ctl restart

これで、502 エラーが出なくなっていれば成功です。

結論

ログを見ましょう。上記のことに気づいたのは/var/log/gitlab/gitlab-workhorse/currentを見たからです。

# cat /var/log/gitlab/gitlab-workhorse/current
...
2016-11-15_18:14:52.32887 2016/11/15 18:14:52 error: GET "/": badgateway: failed after 0.001s: dial unix /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket: connect: connection refused
...

エラーメッセージで検索して出てきた結果を上から順にあーでもないこーでもないと試すより、まずはログです。ログを見ましょう

Ubuntu 16.04 LTS にて Passenger + Apache でサブディレクトリを用いて複数の Webアプリ を実行する方法

1. Passenger での Webアプリ 実行

Rails や Sinatra を Apache で起動する際、Apache を Webアプリ 専用にするのではなく、サブディレクトリで切って複数起動する場合の設定です。Passenger のインストールや、単独での Webアプリ の実行確認は済んでいるものとします。

続きを読む

Rails を production モードで起動した際にエラーが出る場合の対処方法

production モードでの起動

Rails では一般的に develop モードで開発を行っていると思います。これを production モードに変えて起動した場合には以下のような箇所を変更する必要があります*1

以下、アプリのディレクトリを /var/www/myapp/ として説明します。

/var/www/myapp/config/secrets.yml

「/var/www/myapp/config/secrets.yml」内の「secret_key_base」を設定する必要があります。テストで確認するためだけならば、デフォルトの「<%= ENV["SECRET_KEY_BASE"] %>」と指定されているものをコメントアウトして、適当な文字列(「development」や「test」と同じ文字列など)を貼り付けてみるのがいいでしょう。

/var/www/myapp/config/database.yml

production のデータベース指定(設定)が development と production ではデフォルトで異なっています。「/var/www/myapp/config/database.yml」を書き換えて設定しましょう。テストで確認する程度ならば、development と同じデータベースでよいでしょう。

/var/www/myapp/config/environments/production.rb

「/var/www/myapp/config/environments/production.rb」内の「config.assets.compile」がデフォルトでは「false」になっています。ここを「true」にすると aseets が表示されるでしょう。

*1:とりあえず対応した暫定的なものであるので、正式にはちゃんと調べるなどした方がいいでしょう

Powered by はてなブログ