質問編集履歴

5

追記

2017/12/02 08:35

投稿

gogoackman3
gogoackman3

スコア109

test CHANGED
File without changes
test CHANGED
@@ -6,29 +6,123 @@
6
6
 
7
7
  ```ruby
8
8
 
9
- @image_id = @edit_body["id"]
10
-
11
- if Rails.env.production?
12
-
13
- @env = "https://○○○.s3.amazonaws.com"
14
-
15
- else
16
-
17
- @env = "http://0.0.0.0:3000"
18
-
19
- end
20
-
21
-
22
-
23
- @image = open(@env + "/uploads/article_body/part_image/"+ @image_id.to_s + "/" + @edit_body["part_image"])
24
-
25
-
26
-
27
- @edit_body["part_image"] = @image
28
-
29
- @edit_body.delete("id")
30
-
31
- EditBody.create!(@edit_body)
9
+ def on
10
+
11
+
12
+
13
+ @article = Article.find(params[:article_id])
14
+
15
+
16
+
17
+ # 準備としてパーツのコピーを生成する。
18
+
19
+ @bodies = ArticleBody
20
+
21
+ .where(article_id: @article.id)
22
+
23
+ .order(list_num: :ASC)
24
+
25
+
26
+
27
+ # ボディパーツがない場合は、本番モードに戻す。
28
+
29
+ if @bodies.blank?
30
+
31
+ flash[:success] = "まだパーツがないので本番モードで記事作成をしてください。"
32
+
33
+ redirect_to controller: 'articles', action: 'edit', id: @article.id
34
+
35
+ return
36
+
37
+
38
+
39
+ end
40
+
41
+
42
+
43
+ # トランザクション付きで全てのedit_bodyを複製
44
+
45
+
46
+
47
+ EditBody.transaction do
48
+
49
+ @bodies.each do |body|
50
+
51
+ @edit_body = body.attributes
52
+
53
+
54
+
55
+ # 画像がないパーツの保存
56
+
57
+ if @edit_body["part_image"].blank?
58
+
59
+ @edit_body.delete("id")
60
+
61
+ EditBody.create!(@edit_body)
62
+
63
+
64
+
65
+ # 画像が含まれるパーツの保存
66
+
67
+ else
68
+
69
+ @image_id = @edit_body["id"]
70
+
71
+
72
+
73
+ if Rails.env.production?
74
+
75
+ @env = "https://○○○.s3.amazonaws.com"
76
+
77
+ else
78
+
79
+ @env = "http://0.0.0.0:3000"
80
+
81
+ end
82
+
83
+
84
+
85
+ @image = open(@env + "/uploads/article_body/part_image/"+ @image_id.to_s + "/" + @edit_body["part_image"],'rb')
86
+
87
+
88
+
89
+ @edit_body["part_image"] = @image
90
+
91
+ @edit_body.delete("id")
92
+
93
+ EditBody.create!(@edit_body)
94
+
95
+ @image.close
96
+
97
+ end
98
+
99
+ end
100
+
101
+ end
102
+
103
+
104
+
105
+ # 例外が発生していない場合の処理(編集モードに切り替えて元の画面に返す)
106
+
107
+
108
+
109
+ @article.update(edit_mode: true)
110
+
111
+ redirect_to controller: 'articles', action: 'edit', id: @article.id
112
+
113
+
114
+
115
+ rescue => e
116
+
117
+ # 例外が発生した場合の処理(エラー付きで元の画面に返すだけ)
118
+
119
+ respond_to do |format|
120
+
121
+ format.html { redirect_to(edit_managements_article_path(@article.id) , danger: '編集モードへの移行に失敗しました。お手数ですが、ブラウザを更新した上で再度お試しください。')}
122
+
123
+ # end
124
+
125
+ end
32
126
 
33
127
  ```
34
128
 

4

追記

2017/12/02 08:35

投稿

gogoackman3
gogoackman3

スコア109

test CHANGED
File without changes
test CHANGED
@@ -63,3 +63,71 @@
63
63
 
64
64
 
65
65
  惜しいところまで行っている気がするのですが、何がダメなのでしょうか?10kg程度のファイルをopenする場合は何か他に特別な処理が必要なのでしょうか?
66
+
67
+
68
+
69
+ ###追加情報
70
+
71
+
72
+
73
+ ①エラー発生画面
74
+
75
+ ![イメージ説明](542b5575720c2450b368de22677abde9.png)
76
+
77
+
78
+
79
+ ②エラー発生時にターミナルに表示される履歴
80
+
81
+
82
+
83
+ ```ruby
84
+
85
+ Started POST "/managements/articles/56/edit_bodies/on" for 10.0.2.2 at 2017-12-02 17:26:48 +0900
86
+
87
+ Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
88
+
89
+ Processing by Managements::EditBodiesController#on as HTML
90
+
91
+ Parameters: {"authenticity_token"=>"QTxt99bCtvSt1rQCKRUzcBAu0S0w6HduXbrxhfRD8/tD8ts5j5KiBBFC41CosGMJLvivUH+r9SC9vo//KADKXw==", "article_id"=>"56"}
92
+
93
+ Admin Load (0.4ms) SELECT `admins`.* FROM `admins` WHERE `admins`.`id` = 1 ORDER BY `admins`.`id` ASC LIMIT 1
94
+
95
+ Article Load (0.2ms) SELECT `articles`.* FROM `articles` WHERE `articles`.`id` = 56 LIMIT 1
96
+
97
+ ArticleBody Load (0.6ms) SELECT `article_bodies`.* FROM `article_bodies` WHERE `article_bodies`.`article_id` = 56 ORDER BY `article_bodies`.`list_num` ASC
98
+
99
+
100
+
101
+ Completed 500 Internal Server Error in 36ms (ActiveRecord: 4.8ms)
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+ TypeError (no implicit conversion of nil into String):
110
+
111
+
112
+
113
+ app/controllers/managements/edit_bodies_controller.rb:51:in `block in on'
114
+
115
+ app/controllers/managements/edit_bodies_controller.rb:25:in `on'
116
+
117
+ Rendering /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
118
+
119
+ Rendering /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
120
+
121
+ Rendered /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (3.6ms)
122
+
123
+ Rendering /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
124
+
125
+ Rendered /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.1ms)
126
+
127
+ Rendering /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
128
+
129
+ Rendered /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.2ms)
130
+
131
+ Rendered /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (32.6ms)
132
+
133
+ ```

3

修正

2017/12/02 08:31

投稿

gogoackman3
gogoackman3

スコア109

test CHANGED
File without changes
test CHANGED
@@ -8,27 +8,27 @@
8
8
 
9
9
  @image_id = @edit_body["id"]
10
10
 
11
- if Rails.env.production?
11
+ if Rails.env.production?
12
12
 
13
- @env = "https://○○○.s3.amazonaws.com"
13
+ @env = "https://○○○.s3.amazonaws.com"
14
14
 
15
- else
15
+ else
16
16
 
17
- @env = "http://0.0.0.0:3000"
17
+ @env = "http://0.0.0.0:3000"
18
18
 
19
- end
19
+ end
20
20
 
21
21
 
22
22
 
23
- @image = open(@env + "/uploads/article_body/part_image/"+ @image_id.to_s + "/" + @edit_body["part_image"])
23
+ @image = open(@env + "/uploads/article_body/part_image/"+ @image_id.to_s + "/" + @edit_body["part_image"])
24
24
 
25
25
 
26
26
 
27
- @edit_body["part_image"] = @image
27
+ @edit_body["part_image"] = @image
28
28
 
29
- @edit_body.delete("id")
29
+ @edit_body.delete("id")
30
30
 
31
- EditBody.create!(@edit_body)
31
+ EditBody.create!(@edit_body)
32
32
 
33
33
  ```
34
34
 

2

修正

2017/12/02 07:39

投稿

gogoackman3
gogoackman3

スコア109

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  if Rails.env.production?
12
12
 
13
- @env = "https://besme.s3.amazonaws.com"
13
+ @env = "https://○○○.s3.amazonaws.com"
14
14
 
15
15
  else
16
16
 

1

修正

2017/12/02 07:34

投稿

gogoackman3
gogoackman3

スコア109

test CHANGED
File without changes
test CHANGED
@@ -1,36 +1,6 @@
1
1
  ###発生している問題
2
2
 
3
3
  下記のプログラムを動かした時に`no implicit conversion of nil into String`というエラーが表示されるケースがあって困っています。
4
-
5
-
6
-
7
- 具体的には`@image = open(@env + "/uploads/article_body/part_image/"+ @image_id.to_s + "/" + @edit_body["part_image"])`の部分です。
8
-
9
-
10
-
11
- ①問題ない時は@imageの中身
12
-
13
- > <Tempfile:/tmp/open-uri20171202-3561-eabc01>
14
-
15
-
16
-
17
- ②エラーになる時の@imageの中身
18
-
19
- > <StringIO:0x007f98c57effa8 @base_uri=#<URI::HTTP http://0.0.0.0:3000/uploads/article_body/part_image/850/7d306eb5-b26a-4fdb-a900-377fc0883860.jpg>, @meta={"last-modified"=>"Sat, 02 Dec 2017 06:54:10 GMT", "content-type"=>"image/jpeg", "content-length"=>"10087"}, @metas={"last-modified"=>["Sat, 02 Dec 2017 06:54:10 GMT"], "content-type"=>["image/jpeg"], "content-length"=>["10087"]}, @status=["200", "OK"]>
20
-
21
-
22
-
23
- ###なんとなくわかっている事
24
-
25
- 10kb程度の小さな画像ファイルをopenする場合に発生している模様。どうやら容量が小さいとひらけない?
26
-
27
-
28
-
29
- ###やってみた事
30
-
31
- [こちらの記事](http://www.geocities.jp/m_hiroi/light/abcruby04.html)を参考に、第二引数に`"rb"`を追加し`@image = open(@env + "/uploads/article_body/part_image/"+ @image_id.to_s + "/" + @edit_body["part_image"],"rb")`としてみましたが、結果は同じでした。
32
-
33
-
34
4
 
35
5
 
36
6
 
@@ -64,4 +34,32 @@
64
34
 
65
35
 
66
36
 
37
+ 具体的には`@image = open(@env + "/uploads/article_body/part_image/"+ @image_id.to_s + "/" + @edit_body["part_image"])`の部分です。
38
+
39
+
40
+
41
+ ①問題ない時は@imageの中身
42
+
43
+ > <Tempfile:/tmp/open-uri20171202-3561-eabc01>
44
+
45
+
46
+
47
+ ②エラーになる時の@imageの中身
48
+
49
+ > <StringIO:0x007f98c57effa8 @base_uri=#<URI::HTTP http://0.0.0.0:3000/uploads/article_body/part_image/850/7d306eb5-b26a-4fdb-a900-377fc0883860.jpg>, @meta={"last-modified"=>"Sat, 02 Dec 2017 06:54:10 GMT", "content-type"=>"image/jpeg", "content-length"=>"10087"}, @metas={"last-modified"=>["Sat, 02 Dec 2017 06:54:10 GMT"], "content-type"=>["image/jpeg"], "content-length"=>["10087"]}, @status=["200", "OK"]>
50
+
51
+
52
+
53
+ ###なんとなくわかっている事
54
+
55
+ 10kb程度の小さな画像ファイルをopenする場合に発生している模様。どうやら容量が小さいとひらけない?
56
+
57
+
58
+
59
+ ###やってみた事
60
+
61
+ [こちらの記事](http://www.geocities.jp/m_hiroi/light/abcruby04.html)を参考に、第二引数に`"rb"`を追加し`@image = open(@env + "/uploads/article_body/part_image/"+ @image_id.to_s + "/" + @edit_body["part_image"],"rb")`としてみましたが、結果は同じでした。
62
+
63
+
64
+
67
65
  惜しいところまで行っている気がするのですが、何がダメなのでしょうか?10kg程度のファイルをopenする場合は何か他に特別な処理が必要なのでしょうか?