質問編集履歴

8

情報の修正

2019/04/01 08:37

投稿

s_diff
s_diff

スコア107

test CHANGED
@@ -1 +1 @@
1
- [Rails]レコードをupdateするたびにモデルに記述したmount_uploader実行され
1
+ [Rails]open_uriのopenメソッド失敗す
test CHANGED
@@ -1,9 +1,3 @@
1
- carrier_waveで実装したzipファイルのアップロード機能が、
2
-
3
- レコードをupdateするたびに実行されるため、zip_fileカラムの値が変更されて正しいURLを取得できなくなってしまいます。
4
-
5
-
6
-
7
1
  ###環境
8
2
 
9
3
  Rails 4.2.6
@@ -12,48 +6,72 @@
12
6
 
13
7
 
14
8
 
15
- ```request.rb
9
+ ###問題の箇所
16
-
17
- mount_uploader :zip_file, ZipFileUploader
18
-
19
- ```
20
10
 
21
11
 
22
12
 
23
- ```zip_file_uploader.rb
13
+ 以下は本番環境のコンソールによる入出力です。
24
14
 
25
- class ZipFileUploader < CarrierWave::Uploader::Base
15
+ 登録し直す前は、以下のようにopenが失敗して、
26
16
 
27
- include CarrierWave::MiniMagick
28
17
 
29
- def store_dir
30
18
 
31
- "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
19
+ > pry(main)> require 'open-uri'
32
20
 
33
- end
21
+ => false
34
22
 
35
- def extension_whitelist
23
+ pry(main)> file_path = Request.find(23).zip_file.url
36
24
 
37
- %w(zip)
25
+ => "https://s3-ap-northeast-1.amazonaws.com/myapp/uploads/request/zip_file/23/20190401071145.zip"
38
26
 
39
- end
27
+ pry(main)> file_path.class
40
28
 
41
- def filename
29
+ => String
42
30
 
43
- name = "#{Time.now.strftime('%Y%m%d%H%M%S')}.zip"
31
+ pry(main)> open(file_path)
44
32
 
45
- name.downcase
33
+ => OpenURI::HTTPError: 403 Forbidden
46
34
 
47
- end
35
+ from /home/myapp/.rbenv/versions/2.3.1/lib/ruby/2.3.0/open-uri.rb:359:in `open_http'
48
36
 
49
- end
50
37
 
38
+
39
+ 登録し直すと、以下のようにopenが成功します。
40
+
41
+
42
+
43
+ > pry(main)> require 'open-uri'
44
+
45
+ => false
46
+
47
+ pry(main)> file_path = Request.find(23).zip_file.url
48
+
49
+ => "https://s3-ap-northeast-1.amazonaws.com/myapp/uploads/request/zip_file/23/20190401071145.zip"
50
+
51
+ pry(main)> file_path.class
52
+
53
+ => String
54
+
55
+ pry(main)> open(file_path)
56
+
57
+ => #<File:/tmp/open-uri20190401-12345-1a3r46m>
58
+
59
+
60
+
61
+
62
+
51
- ```
63
+ ###試したこと
64
+
65
+ ・ openメソッドが使えないzipファイルを、s3から直接ダウンロードすることは問題なくできます。
66
+
67
+ ・ URLに文字列以外が入っているとopenが失敗するそうなので型をしらべたところ、どちらの場合もString型でした。
68
+
69
+ ・ User Agentを偽装してopenメソッドの引数に追加してみましたが、成功しませんでした。
52
70
 
53
71
 
54
72
 
55
73
  ###知りたいこと
56
74
 
57
- なぜレコードを更新するたびにzip_fileカラムの値変更されるのか知りたいです。
75
+ なぜopenメソッド失敗しているのか知りたいです。またopenメソッドを成功させるためにはどうすればよいでしょうか。
58
76
 
59
- なにかご教示いただけることがあれば、なにとぞよろしくお願いいたします。
77
+ なにかご教示いただけることがありましたら、なにとぞよろしくお願いいたします。

7

情報の修正

2019/04/01 08:37

投稿

s_diff
s_diff

スコア107

test CHANGED
@@ -1 +1 @@
1
- [Rails]s3上あるzipファイopen_uriでopenできない
1
+ [Rails]レコードをupdateするたびモデに記述したmount_uploaderが実行される
test CHANGED
@@ -1,10 +1,6 @@
1
- ある時期から、s3上にあるzipファイルのURLにたいして,
1
+ carrier_waveで実装したzipファイルのアップロード機能が、
2
2
 
3
- open_uriのopenメソッド使えなくなってしまいました
3
+ レコードをupdateするたびに実行されるため、zip_fileカラム変更されて正しいURLを取得できなくなってしまいま
4
-
5
-
6
-
7
- ただ、もう一度zipファイルを登録し直すとopenメソッドは使えます。
8
4
 
9
5
 
10
6
 
@@ -16,72 +12,48 @@
16
12
 
17
13
 
18
14
 
19
- ###問題の箇所
15
+ ```request.rb
16
+
17
+ mount_uploader :zip_file, ZipFileUploader
18
+
19
+ ```
20
20
 
21
21
 
22
22
 
23
- 以下は本番環境のコンソールによる入出力です。
23
+ ```zip_file_uploader.rb
24
24
 
25
- 登録し直す前は、以下のようにopenが失敗して、
25
+ class ZipFileUploader < CarrierWave::Uploader::Base
26
26
 
27
+ include CarrierWave::MiniMagick
27
28
 
29
+ def store_dir
28
30
 
29
- > pry(main)> require 'open-uri'
31
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
30
32
 
31
- => false
33
+ end
32
34
 
33
- pry(main)> file_path = Request.find(23).zip_file.url
35
+ def extension_whitelist
34
36
 
35
- => "https://s3-ap-northeast-1.amazonaws.com/myapp/uploads/request/zip_file/23/20190401071145.zip"
37
+ %w(zip)
36
38
 
37
- pry(main)> file_path.class
39
+ end
38
40
 
39
- => String
41
+ def filename
40
42
 
41
- pry(main)> open(file_path)
43
+ name = "#{Time.now.strftime('%Y%m%d%H%M%S')}.zip"
42
44
 
43
- => OpenURI::HTTPError: 403 Forbidden
45
+ name.downcase
44
46
 
45
- from /home/myapp/.rbenv/versions/2.3.1/lib/ruby/2.3.0/open-uri.rb:359:in `open_http'
47
+ end
46
48
 
49
+ end
47
50
 
48
-
49
- 登録し直すと、以下のようにopenが成功します。
50
-
51
-
52
-
53
- > pry(main)> require 'open-uri'
54
-
55
- => false
56
-
57
- pry(main)> file_path = Request.find(23).zip_file.url
58
-
59
- => "https://s3-ap-northeast-1.amazonaws.com/myapp/uploads/request/zip_file/23/20190401071145.zip"
60
-
61
- pry(main)> file_path.class
62
-
63
- => String
64
-
65
- pry(main)> open(file_path)
66
-
67
- => #<File:/tmp/open-uri20190401-12345-1a3r46m>
68
-
69
-
70
-
71
-
72
-
73
- ###試したこと
51
+ ```
74
-
75
- ・ openメソッドが使えないzipファイルを、s3から直接ダウンロードすることは問題なくできます。
76
-
77
- ・ URLに文字列以外が入っているとopenが失敗するそうなので型をしらべたところ、どちらの場合もString型でした。
78
-
79
- ・ User Agentを偽装してopenメソッドの引数に追加してみましたが、成功しませんでした。
80
52
 
81
53
 
82
54
 
83
55
  ###知りたいこと
84
56
 
85
- なぜopenメソッド失敗しているのか知りたいです。またopenメソッドを成功させるためにはどうすればよいでしょうか。
57
+ なぜレコードを更新するたびにzip_fileカラムの値変更されるのか知りたいです。
86
58
 
87
- なにかご教示いただけることがありましたら、なにとぞよろしくお願いいたします。
59
+ なにかご教示いただけることがあれば、なにとぞよろしくお願いいたします。

6

情報の追加

2019/04/01 08:26

投稿

s_diff
s_diff

スコア107

test CHANGED
File without changes
test CHANGED
@@ -80,6 +80,8 @@
80
80
 
81
81
 
82
82
 
83
+ ###知りたいこと
84
+
83
85
  なぜopenメソッドが失敗しているのかが知りたいです。またopenメソッドを成功させるためにはどうすればよいでしょうか。
84
86
 
85
87
  なにかご教示いただけることがありましたら、なにとぞよろしくお願いいたします。

5

情報の追加

2019/04/01 08:03

投稿

s_diff
s_diff

スコア107

test CHANGED
File without changes
test CHANGED
File without changes

4

情報の追加

2019/04/01 08:00

投稿

s_diff
s_diff

スコア107

test CHANGED
File without changes
test CHANGED
@@ -72,9 +72,11 @@
72
72
 
73
73
  ###試したこと
74
74
 
75
- openメソッドが使えないzipファイルを、s3から直接ダウンロードすることは問題なくできます。
75
+ openメソッドが使えないzipファイルを、s3から直接ダウンロードすることは問題なくできます。
76
76
 
77
- URLに文字列以外が入っているとopenが失敗するそうなので型をしらべたところ、どちらの場合もString型でした。
77
+ URLに文字列以外が入っているとopenが失敗するそうなので型をしらべたところ、どちらの場合もString型でした。
78
+
79
+ ・ User Agentを偽装してopenメソッドの引数に追加してみましたが、成功しませんでした。
78
80
 
79
81
 
80
82
 

3

情報の追加

2019/04/01 08:00

投稿

s_diff
s_diff

スコア107

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- 問題部分
19
+ ###問題の箇所
20
20
 
21
21
 
22
22
 

2

情報の追加

2019/04/01 07:56

投稿

s_diff
s_diff

スコア107

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,18 @@
5
5
 
6
6
 
7
7
  ただ、もう一度zipファイルを登録し直すとopenメソッドは使えます。
8
+
9
+
10
+
11
+ ###環境
12
+
13
+ Rails 4.2.6
14
+
15
+ ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin17]
16
+
17
+
18
+
19
+ 問題部分
8
20
 
9
21
 
10
22
 

1

情報の追加

2019/04/01 07:55

投稿

s_diff
s_diff

スコア107

test CHANGED
File without changes
test CHANGED
@@ -60,6 +60,8 @@
60
60
 
61
61
  ###試したこと
62
62
 
63
+ openメソッドが使えないzipファイルを、s3から直接ダウンロードすることは問題なくできます。
64
+
63
65
  URLに文字列以外が入っているとopenが失敗するそうなので型をしらべたところ、どちらの場合もString型でした。
64
66
 
65
67