teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

画像追加

2018/03/15 02:28

投稿

sakurasaku
sakurasaku

スコア15

title CHANGED
File without changes
body CHANGED
@@ -60,4 +60,7 @@
60
60
  ![イメージ説明](0950a0e20196b072ff7ea3125c3974d9.png)
61
61
 
62
62
  エラーメッセージが生じているのはviewの部分です。
63
- ![イメージ説明](0d7eda2bd0bfa47f19a5724be97df6bf.png)
63
+ ![イメージ説明](0d7eda2bd0bfa47f19a5724be97df6bf.png)
64
+
65
+ なお、Sidekiqで待機状態が積み重なっているので、Sidekiqそのものは動いているものと考えております。
66
+ ![イメージ説明](2fe7653eca749e95432d5198d72467db.png)

2

背景やエラーメッセージを追記しました

2018/03/15 02:28

投稿

sakurasaku
sakurasaku

スコア15

title CHANGED
File without changes
body CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  **■users_controller.rb**
12
12
  ```
13
- @posts = ArticleWorker.perform_async(params[:name])
13
+ @posts = ArticleWorker.perform_async(params)
14
14
 
15
15
  ```
16
16
 
@@ -19,7 +19,7 @@
19
19
  class ArticleWorker
20
20
  include Sidekiq::Worker
21
21
 
22
- def perform(params[:name])
22
+ def perform(params)
23
23
  user = User.find_by(name: params[:name])
24
24
  Post.where(user_id: user.id).select(:id,:sort,:title).order(:sort).limit(4).offset(0)
25
25
  end
@@ -34,7 +34,30 @@
34
34
  **■show.html.erb**
35
35
  ```
36
36
  <% @posts.each do |post| %>
37
- <h4><%= post.title %></h4>
37
+   <h4><%= post.title %></h4>
38
+   <%= render 'form', {user: @user, num: post.sort} %>
39
+ <% end %>
38
40
  ```
39
41
 
40
- おそらく、根本的に誤解をしていると思うのですが、解決の方向性にも検討がつきません。なお、非同期にしたい理由、この処理が非常に時間が掛かってしっているからです。どうぞよろしくお願いいたします。
42
+ なお、form内下記となります。
43
+
44
+ **■_form.html.erb**
45
+ ```
46
+ <% user.posts.each_with_index do |post,i| %>
47
+ <% if post.sort == num %>
48
+
49
+ <% page = MetaInspector.new(post.url1) %>
50
+     以下略
51
+ ```
52
+
53
+
54
+ おそらく、根本的に誤解をしていると思うのですが、解決の方向性にも検討がつきません。なお、非同期にしたい理由は、スクレイピング処理が非常に時間が掛かってしまっているからです。つまり、sidekiqで非同期処理したいのは、MetaInspector(NokogiriやMechanizeに似たスクレイピング系gem)の処理です。ただ、この部分だけを非同期にするよりも、大元の上記<% @posts.each do |post| %>に関わる部分をまとめて非同期にした方が良いのかなと思い、現状のような方向性で書いております。どうぞよろしくお願いいたします。
55
+
56
+
57
+ ----------追記------------
58
+
59
+ エラーメッセージはNomethodErrorでして下記となります。
60
+ ![イメージ説明](0950a0e20196b072ff7ea3125c3974d9.png)
61
+
62
+ エラーメッセージが生じているのはviewの部分です。
63
+ ![イメージ説明](0d7eda2bd0bfa47f19a5724be97df6bf.png)

1

情報を追記しました

2018/03/15 02:21

投稿

sakurasaku
sakurasaku

スコア15

title CHANGED
@@ -1,1 +1,1 @@
1
- 非同期処理の「Sidekiq」でundefined methodとな
1
+ 非同期処理の「Sidekiq」でundefined methodとなってしまう
body CHANGED
@@ -1,4 +1,4 @@
1
- 現状、下記のコードで動いております。(scopeをまだしておらず、すみません)
1
+ 現状、下記のコードで動いております。
2
2
 
3
3
  **■users_controller.rb**
4
4
  ```
@@ -6,11 +6,11 @@
6
6
  @posts = Post.where(user_id: @user.id).select(:id,:sort,:title).order(:sort).limit(4).offset(0)
7
7
  ```
8
8
 
9
- この後、redis、sidekiq、sinatraなどを導入、テスト版がうまく動いているのを確認して、上記の既存コードをdelayed_jobで動かそうと、"rails g sidekiq:worker Article"をした上で、下記を試しました。
9
+ この後、redis、sidekiq、sinatraを導入、テスト版がうまく動いているのを確認して、上記の既存コードを非同期にしようと、"rails g sidekiq:worker Article"をした上で、下記を試しました。
10
10
 
11
11
  **■users_controller.rb**
12
12
  ```
13
- @posts = ArticleWorker.perform_async(post)
13
+ @posts = ArticleWorker.perform_async(params[:name])
14
14
 
15
15
  ```
16
16
 
@@ -19,7 +19,7 @@
19
19
  class ArticleWorker
20
20
  include Sidekiq::Worker
21
21
 
22
- def perform(post)
22
+ def perform(params[:name])
23
23
  user = User.find_by(name: params[:name])
24
24
  Post.where(user_id: user.id).select(:id,:sort,:title).order(:sort).limit(4).offset(0)
25
25
  end
@@ -37,4 +37,4 @@
37
37
  <h4><%= post.title %></h4> 略
38
38
  ```
39
39
 
40
- どうぞよろしくお願いいたします。
40
+ おそらく、根本的に誤解をしていると思うのですが、解決の方向性にも検討がつきません。なお、非同期にしたい理由は、この処理が非常に時間が掛かってしまっているからです。どうぞよろしくお願いいたします。