質問編集履歴
3
画像追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -60,4 +60,7 @@
|
|
60
60
|

|
61
61
|
|
62
62
|
エラーメッセージが生じているのはviewの部分です。
|
63
|
-

|
63
|
+

|
64
|
+
|
65
|
+
なお、Sidekiqで待機状態が積み重なっているので、Sidekiqそのものは動いているものと考えております。
|
66
|
+

|
2
背景やエラーメッセージを追記しました
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
|
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
|
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
|
+

|
61
|
+
|
62
|
+
エラーメッセージが生じているのはviewの部分です。
|
63
|
+

|
1
情報を追記しました
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
非同期処理の「Sidekiq」でundefined methodとな
|
1
|
+
非同期処理の「Sidekiq」でundefined methodとなってしまう
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
現状、下記のコードで動いております。
|
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
|
9
|
+
この後、redis、sidekiq、sinatraを導入、テスト版がうまく動いているのを確認して、上記の既存コードを非同期にしようと、"rails g sidekiq:worker Article"をした上で、下記を試しました。
|
10
10
|
|
11
11
|
**■users_controller.rb**
|
12
12
|
```
|
13
|
-
@posts = ArticleWorker.perform_async(
|
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(
|
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
|
+
おそらく、根本的に誤解をしていると思うのですが、解決の方向性にも検討がつきません。なお、非同期にしたい理由は、この処理が非常に時間が掛かってしまっているからです。どうぞよろしくお願いいたします。
|