質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

解決済

3回答

922閲覧

Railsアプリケーションでhttps通信設定をしたが、外部APIで取得したイメージURLのみhttpになってしまう

hrmths

総合スコア17

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

1グッド

0クリップ

投稿2017/12/25 01:14

現状

Railsアプリケーション(本のSNS)で、deviseとomniauthでFacebookログイン機能を作っています。
Let's encryptでSSL証明書を発行し、サイト自体はhttps通信ができているのですが、楽天ブックスAPIから取得した画像URLと商品詳細ページURL、Facebookから取得したユーザープロフィール画像URLが、httpになっており、そのせいで「保護された通信」の表示がされない状態。
DBに、httpの画像パスが保存されている

イメージ説明

利用API

楽天ブックス書籍検索API
https://webservice.rakuten.co.jp/api/booksbooksearch/

環境

Ruby 2.3.0
Rails 5.0.1
nginx 1.12.2
unicorn 5.3.1

アプローチ

2つある気がしています。

  1. 楽天APIとFaecbookAPIから画像・リンクを取得する際に、httpsのリンクを取得する
  2. nginxやunicornの設定でなんとかhttpsにできないか

1については、楽天APIで、
https://github.com/rakuten-ws/rws-ruby-sdk
Railsのgemを使って実装すると、以下のように20140222のURLでAPIを叩いてしまい、レスポンスの商品URLと画像URLが、httpで返ってきてしまいます。
https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222

最新の仕様(ver.20170404)では、httpsで返すようになっているようですが、gemが対応していない?と思うので、ここはどうしようもない気がしています。(もし何か手があればご教授ください)
https://webservice.rakuten.co.jp/api/booksbooksearch/

2については、色々調べてみたのですが、解決策を見つけられずにいます。
このあたりを試しました。

https://qiita.com/ywatai@github/items/a179186a458a42b3c7f0
http://fujiyasu.hatenablog.com/entry/2016/06/30/094348

個人的には、1が本質的な気がしますが、現状難しそうな気がするので、2でなんとかしたいと思っています。
アドバイスいただけると助かります。よろしくお願いします。

情報不足しておりましたら、ご指摘いただければ追記いたします。

(参考)ソースコード

/etc/nginx/conf.d/rails.conf

server { listen 80; server_name myapp.com; return 301 https://myapp.com; } server { listen 443 ssl http2; server_name myapp.com; ssl_certificate /etc/letsencrypt/live/myapp.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/myapp.com/privkey.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers AESGCM:HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /home/me/myapp/public; client_max_body_size 100m; error_page 404 /404.html; error_page 500 502 503 504 /500.html; try_files $uri/index.html $uri @unicorn; location @unicorn { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Proto https; proxy_pass http://unicorn; proxy_redirect http:// https://; } }
satoryu👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

rws-ruby-sdkを開発しているものです。

ご利用いただき、ありがとうございます。
また、最新のバージョンに対応できておらず、ご不便をかけてしまい申し訳ありません。

@kawax さんがご指摘しているように、endpointメソッドを使ってアプリケーションのコードからエンドポイントのURLを変更可能です。

# エンドポイントを変更する RakutenWebService::Books::Book.endpoint('https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404') # 変更後、検索結果は book = RakutenWebService::Books::Book.search(title: 'Ruby').first puts book.small_image_url #=> "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/6295/9784797386295.jpg?_ex=64x64"

近々バージョンアップの対応をしようと思います。

投稿2018/01/03 03:15

satoryu

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hrmths

2018/01/03 08:40

ありがとうございます!試してみます。アップデートもよろしくお願いします。
hrmths

2018/01/07 23:01

ご対応ありがとうございます!
guest

0

API使うライブラリは普通はエンドポイント変更できるように作ります。
詳しくは見てませんがこれは見つけたので使用時に変更できると思います。

def endpoint(url=nil) @endpoint = url || @endpoint end

https://github.com/rakuten-ws/rws-ruby-sdk/blob/3bc5dd32f55efefdde9eab11f6e49964363ddbaf/lib/rakuten_web_service/resource.rb#L48

2のほうはRSSリーダーなんかで使うプロキシでできます。
Rails側で画像を取得してそのまま表示。
/image?url=(httpなURL)

投稿2017/12/25 02:13

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hrmths

2017/12/26 12:43 編集

すみません、回答遅くなりました。ありがとうございます。 endpointの変更は具体的にはどのようにやったらよいのでしょうか?初心者のためあまりイメージがつかずでして。。このgemをforkしてカスタマイズするという意味ではないですよね?
guest

0

楽天APIについては、gemをforkしてカスタマイズすることで、無事httpsのリンクをgetすることができました。
facebookもhttpsのprofile image urlを取れそうな気もするので、もう少し調べてみる。無理そうだったら、http -> httpsに置換する。

投稿2017/12/28 08:02

hrmths

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問