🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

3144閲覧

Railsのコントローラー上で、環境変数が読み込めない。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/03/21 05:11

編集2021/03/21 05:39

前提・実現したいこと

Railsのコントローラー上で、.envのファイルに設定した環境変数を読み込んでAPIを取得したい。

質問内容

Ruby-on-RailsでSNSのアプリケーションを作成しております。
NewsApiを使用し、News情報を取得し表示する機能を実装中にAPIKEYを.envファイルにて
環境変数に置き換えて使用したいのですが、エラーが発生して読み込めません。
お手数ですが、ご指導ご鞭撻のほど、よろしくお願いいたします。

環境
Ruby 2.6.6
Rails 6.0.3.4

実装で参考にした記事
https://qiita.com/UTOG/items/f6438420e81b6488a508
https://laptrinhx.com/rails-newsapiwo-shittekurisumasunyusuwo-shou-jisuruapuriwo-zuoru-4288957525/
以上を参考にNewsApiへ登録し、APIKEYを取得し環境変数として設定。
gemのdotenv-railsインストール済

エラーメッセージ

syntax error, unexpected tCONSTANT, expecting ')' ...ze=15&apiKey=<%="#{ENV['API_KEY']}"%>') ... ^~~~~~~ /app/controllers/news_controller.rb:6: syntax error, unexpected ')', expecting end ...iKey=<%="#{ENV['API_KEY']}"%>')

該当のソースコード

news_Controller.rb

class NewsController < ApplicationController def index end def data uri = URI.parse('http://newsapi.org/v2/top-headlines?country=jp&category=business&pageSize=15&apiKey=<%="#{ENV['API_KEY']}"%>') json = Net::HTTP.get(uri) moments = JSON.parse(json) @data = moments['articles'].to_json end end

index.html.haml

index.html.haml

1.container 2 %h2 Business News 3 = link_to 'Powered by News API', 'https://newsapi.org' 4 %hr/ 5 #result no information... 6 :javascript 7 var f = function(){ 8 $.ajax({ 9 type: 'GET', 10 url: '/news/data' 11 }); 12 }; 13 f(); 14

data.js.erb

var data = <%== @data %>; var result = '<div class="datas">' data.forEach(function(e){ var div = '<div class="data">' if (e.urlToImage != null) { result += '<img src="' + e.urlToImage +'" class="image_data">'; } result += '<a href="' + e.url +'" class="yahoo_link" target="_blank">' + e.title + '</a><br>'; result += '<p class="time_data">' + e.publishedAt + '</p><hr class="clear">'; div += '</div>' }); result += '</div>' $('#result').html(result);

.env

API_KEY='この中に取得したAPI_KEYを入力'

試したこと

他の方の解決方法などを検索し、コントローラー6行目のURIの末尾周辺コードをapiKey=<%="#{ENV['API_KEY']}"%>、apiKey=<%=ENV['API_KEY']%>、apiKey=ENV['API_KEY']など色々変更して試してみるものの環境変数を読み込めませんでした。
apiKeyの末尾に取得したAPIKEYを直接入力した場合は、問題なくニュースデータを読み込むことができ、コンソール上で
ENV['API_KEY']を実行した場合も環境変数はきちんと出力されておりました。
下記、画像の通り、6行目のuriのapiKey=以降にアンダーラインが引かれていないのが気になっておりますが、解決できませんでした。

お手数ですが、ご確認のほどよろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1uri = URI.parse("http://newsapi.org/v2/top-headlines?country=jp&category=business&pageSize=15&apiKey=#{ENV['API_KEY']}")

ザッと読んだだけで恐縮ですが、これでいけるのではないかと思いますのでお試しいただけますか?

<% %>や<%= %>の記述はerbファイル内で使える記述で、
erb上でRubyコードを実行したり、Rubyで定義した変数などをHTMLとして出力したりする際に利用します。
今回、ENV['API_KEY']についてはRubyファイルであるcontrollerに書かれているので、こちらを省くことで実行できるのではないかと思いますがいかがでしょうか?

投稿2021/03/21 06:39

yoshi_10_11

総合スコア241

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

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

退会済みユーザー

退会済みユーザー

2021/03/21 06:57

yoshi_10_11様 この度は早急なご回答頂き誠にありがとうございます。 アドバイス頂いた通りに変更したところ無事表示することができました! このエラーに時間をかなり取られてしまったため、本当に助かりました。 また、<% %>等の記述についても、ご教授頂き誠にありがとうございます。 やはりコントローラーでは使用できない記法ということで大変勉強になりました。 また機会がございましたらお手数お掛けいたしますが、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問