Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
fastladderをいじるやつ

これなん

  • fastladderをsystemdで上げ下げできるようにしたり、クローラーバグを直したり、おひとりシステム化したりした記録
  • クローラーバグ修正関連は https://github.com/Akkiesoft/fastladder/commits/crawler にコミットした。英語ができなさすぎてプルリクがためらわれるしGoogle翻訳を使った。

DB

絵文字(4bytes UTF-8)対応

  • 最初から作る時
create database fastladder charset=utf8mb4;
  • 後から変更する時
ALTER TABLE crawl_statuses CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE favicons CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE feeds,folders CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE feeds CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE folders CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE items CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE members CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE pins CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE schema_migrations CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ALTER TABLE subscriptions CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

URLが長すぎるフィードの取得対応

グッスマのフィード対応

alter table items modify link text;

https://github.com/Akkiesoft/fastladder/commit/360cd8ed79ce33158f9bc642a0dec38b13bb43e5

crawler

fastladder/lib/fastladder/crawler.rb

カテゴリーがないフィードの考慮漏れへの対応

Engadget Japaneseのフィード対応

-          category: item.categories.first,
+          category: (defined? item.categories) ? item.categories.first : "",

https://github.com/Akkiesoft/fastladder/commit/949fe291b4f4720ec6e046d19351745546e3e279

cut_off()メソッドの引数にfeedが足りないので足す

cut_off()の引数にfeedがないので、メソッドのログ出力時にエラーになるのでfeedを足す ログ出力をコメントアウトしても良いけど。

-    def cut_off(items)
+    def cut_off(feed, items)
    def update(feed, source)
(略)
-      items = cut_off(items)
+      items = cut_off(feed, items)

https://github.com/Akkiesoft/fastladder/commit/cf898cc7dbcdc5b33348f149a9f2bb3feac782a1

リンクタグの加工時に不正なリンクの考慮がなく、リンクではない文字が混じるとフィードのクロールに失敗する

たとえばこんなふうに間違えてタグが挿入されていた場合とか

    def fixup_relative_links(feed, body)
(略)
         links.each do |link|
-          link['href'] = Addressable::URI.join(feed.feedlink, link['href']).normalize.to_s
+          begin
+            link['href'] = Addressable::URI.join(feed.feedlink, link['href']).normalize.to_s
+          rescue
+            @logger.info "Invalid link [#{feed.feedlink}] [#{link['href']}]"
+          end
         end

https://github.com/Akkiesoft/fastladder/commit/ded7e19b455086c026e8967e358b01c18f2c3937

delete_old_items_if_new_items_are_many()が動かない

  • feedパラメータがない。これはcut_offと同様に足せば良い
  • Items.where(feed_id: feed.id).delete_all がtypoしている。Itemがただしい。

https://github.com/Akkiesoft/fastladder/commit/b9f46c724fbab5ff905d7ddc271c7dbf7f901faf

systemd

  • User/Groupは適当に
  • /etc/systemd/system/fastladder-crawler.service
[Unit]
Description=Fastladder crawler
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/bin/ruby2.3 script/crawler -e production -l /var/log/fastladder/crawler.log
WorkingDirectory=/var/www/fastladder
KillMode=process
Restart=always
User=***
Group=***

[Install]
WantedBy=multi-user.target

SIGTERMを受け取ったらTerminateするようにする

これを追加しておかないとrestartできない。

https://github.com/Akkiesoft/fastladder/commit/534faf61b20957b7ac8fd71725147f9d81b8a89e

UI

プライベートモード

systemd

  • User/Groupは適当に
  • /etc/systemd/system/fastladder-web.service
[Unit]
Description=Fastladder web frontend
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/rails server -b 127.0.0.1 -e production
WorkingDirectory=/var/www/fastladder
KillMode=process
Restart=always
User=***
Group=***

[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment