【RubyOnRails】format.jsが呼ばれない, respond_to内のreturnについて
問題
タイトルがうまくまとめられていませんが、、
非同期による処理をwebページ上で行いたく、js経由でコントローラのupdateアクションを呼ぼうとしています。その途中でsave
失敗時などに処理を中断したいなと思いたち、を下の様なコードを書きました。
# hoge_controller.rb def update if (予期しない入力がある、save失敗など) respond_to do |format| format.js{ @status = "fail" render ajax_redirect_to(root_path) # 非同期でリダイレクトする独自メソッド return # ここに挟んでみた } format.html{ flash[:danger] = I18n.t("events.update.danger.category") redirect_to(root_path) # htmlはこれをすれば処理を抜けるはず } end end # ここから正常処理を行う。 .... .... end
しかしこれでは、format.js
は呼ばれません。(おそらくhtmlも呼ばれない)
解決
ブロック内にreturn
を挟むとその時点で、メソッドを抜けるとのこと。上のコードでは、そもそもformat.jsが呼ばれる前にupdate
から抜けてしまっているのが原因ですね。下の様に直しました。respond_to
の外にreturn
を設置。無事期待通りの動きになりました。
# hoge_controller.rb def update if (予期しない入力がある、save失敗など) respond_to do |format| format.js{ @status = "fail" render ajax_redirect_to(root_path) # 非同期でリダイレクトする独自メソッド } format.html{ flash[:danger] = I18n.t("events.update.danger.category") redirect_to(root_path) # htmlはこれをすれば処理を抜けるはず } end return # ここに移動 end # ここから正常処理を行う。 .... .... end
form_with の label 内に<i>タグを使用する
Rails
でdevise
を使用してサインアップフォームを生成し、ビューのコードをSlim
で書き換える際に困りました。以下のようなform_with
を用いてフォームを生成している場面
<div class="field"> <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br /> <%= f.password_field :password, autocomplete: "new-password" %>
以下のように書き換えられます。
.field = f.label :password i | (leave blank if you dont want to change it) br/ = f.password_field :password,id:"password", class: "form-control", autocomplete: "new-password"
インデントがわかりにくいのは申し訳ないです。この書き方において、<i>
タグはlabel
には含まれていないです。上の元コードも含まれていないので。
ハニポログイン試行パスワードランキング(2018年後期ウチのt-pot ver.)
はじめに
タイトル通りですが、ウチに植えていたt-potにアクセスしてきた方々が、ログイン試行に使用したユーザ名とパスワードを書き留めておこうと思います。ただ、設置したのが10月後半なので、3ヶ月に満たない物になるのはご了承ください。
ユーザ名
ユーザ名 | 回数 |
---|---|
root | 397169 |
admin | 123183 |
enable | 74671 |
shell | 66570 |
(空白) | 25687 |
user | 12734 |
guest | 12591 |
sh | 10681 |
default | 9605 |
1234 | 8818 |
パスワード
パスワード | 回数 |
---|---|
system | 67187 |
sh | 63135 |
61162 | |
1234 | 27995 |
admin | 18825 |
123456 | 18232 |
password | 16520 |
12345 | 12216 |
user | 10625 |
1111 | 9500 |
2018年最悪なパスワードランキングは..
ランク | パスワード |
---|---|
1位 | 123456 |
2位 | password |
3位 | 123456789 |
4位 | 12345678 |
5位 | 12345 |
6位 | 111111 |
7位 | 1234567 |
8位 | sunshine |
9位 | qwerty |
10位 | iloveyou |
以下から引用してきています。100位まで載っているのでぜひ見て下さい。 gigazine.net
The Worst Passwords of 2018 100-50 | SplashData
比べてみて
123456
とpassword
は入っていますね。1111
や1234..
に属するものも見受けられます。この最悪パスワードランキングはシステム系からwebサイト全般など全ての統計と思われるので、4桁のパスワードが登場しないのはそれだけ桁数制限をかけている場所が多いからではないでしょうか?対してハニポさんには4桁のものやsh
まで登場しますから(adminとか手抜き設定すぎる..)、比較したランキングの分野が多少違うのかなと感じます。それでも、王道のパスワードはやはり王道でした笑
RubyOnRailsチュートリアルのテストをRSpecで書く
前書き
最近Rubyのチュートリアルをやっていたのですが、その中で紹介されているテストコードはMinitestで書かれています。今回はそれをRSpecに書き換えながら行ったので、どうせなら公開しておこうと思います。(RSpec初心者なので綺麗な書き方はできていません!)rubyもRSpecも初心者だった私はとても苦戦したので、そんな人の助けになればとおもいます。チュートリアルは下のページから飛べます。 現時点でRails5.1版を参考にしました。
書き換える際に..
書き換えながら思ったことは、ビュー周りのテストをどう書くか。CapybaraというGemを使用すればほとんどの事は出来ますが、そもそもビューのテストをチュートリアルが紹介しているほど正確にやるべきかと、疑問には思いました。
それと、可能な限りチュートリアルのテストコードがやっているテストを再現したつもりですが、コントローラとフィーチャーテストの境が微妙なテストは、別の場所に書いたり、省略していたりします。(初心者なので許してください。)
また、検索で引っかかるRSpec書き換えのブログさんの物を多少借りている部分もあったと思うので、被っていたら申し訳ないです!
本題
以下のリンクから飛べます。一応プロジェクトごと載せておきます。
Docker You are using pip version 10.0.1, however version 18.1 is available.
状況
https://graneed.hatenablog.com/entry/2018/06/14/231740
上のサイトを参考にt-potに新しくWOWHoneypotを追加しようと、イメージのBuild中。下のようなエラーが出た。よく見るエラーだけどわかりづらいエラー。
Could not find a version that satisfies the requirement install (from versions: ) No matching distribution found for install You are using pip version 10.0.1, however version 18.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
環境は
16.04.5 LTS (GNU/Linux 4.15.0-39-generic x86_64)
今回
# Install packages RUN apk -U upgrade && \ apk add build-base git libssl1.0 openssl-dev libffi-dev python-dev py-cffi py-ipaddress py-lxml py-mysqldb py-pip py-pysqlite py-requests py-setuptools && \ pip install --upgrade pip RUN pip install pyOpenSSL==16.2.0
1. 上記のエラーからpip
のバージョンを上げるために、 pip install --upgrade pip
追記
1. ここと似たエラーが出たため、libffi-dev
をapk add
行に追記。
これでビルドに成功
まとめ
linux内のpip系は全く関係ない。Dockerfile内での記述を変更する。Docker初心者にはわかりにくかった。