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

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

詳細はこちら
Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

2回答

4039閲覧

EC2のサーバーに環境変数を設定したい

ik_ko

総合スコア9

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/03/15 14:26

編集2021/03/16 04:39

現在ポートフォリオ作成してるのですがエラーで詰まっているので、原因がわかる方ご教授お願いします。

環境

ruby
rails
mysql

問題発生状況

EC2へデプロイ時、以下のエラーが発生しました。
長いためgistに載せました。
エラーログ

試したこと、考えたこと

Mysql2::Error::ConnectionError: Access denied for user 'root'@'localhost' (using password: NO)

上記のエラーからproductionの設定が読み込まれていないということだと思い調べたところ、EC2側に環境変数が設定されていなかったので以下の記事を参考に行いました。
環境変数の設定

[ec2-user@ip-172-31-23-189 <アプリ名>]$ sudo vim /etc/environment

上記のコマンド実行後、環境変数を記述し、

[ec2-user@ip-172-31-23-189 ~]$ ssh -i ファイル名.pem ec2-user@[Elastic IPの値]

上記をを実行したところ、

@ip-10-0-0-55 ~]$ssh -i sdf_app.pem kosuke@35.72.128.67 Warning: Identity file sdf_app.pem not accessible: No such file or directory. Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

上記のエラー後、サーバー側のmysqlにはログインできることは確認できています。
上記のエラーが発生したので原因がわかる方がいましたらご教授して頂きでたいです。

以下追記させて頂きます。
database.yml

default: &default adapter: mysql2 encoding: utf8mb4 pool: 5 username: <%= ENV['DB_USER'] %> password: <%= ENV['DB_PASSWORD'] %> socket: /tmp/mysql.sock host: localhost development: <<: *default database: <%= ENV['DB_NAME'] %> test: <<: *default database: sdf_app_test production: adapter: mysql2 encoding: utf8mb4 pool: 5 database: sdf_app_production username: root password: <%= ENV['RDS_PASSWORD'] %> host: <%= ENV['RDS_ENDPOINT'] %>

.env(流出するので値のみ削除しています)

DB_USER = DB_PASSWORD = DB_NAME = LANG = RACK_ENV = RAILS_ENV = RAILS_LOG_TO_STDOUT = RAILS_SERVE_STATIC_FILES = SDF_APP_DATABASE_PASSWORD = DATABASE_URL = SECRET_KEY_BASE = AWS_ACCESS_KEY = AWS_SECRET_KEY = AWS_BUCKET_NAME = RDS_PASSWORD = RDS_ENDPOINT =

deploy.rb

# config valid for current version and patch releases of Capistrano lock "~> 3.16.0" set :application, "sdf_app" set :repo_url, "git@github.com:ikkorokoro/sdf-app.git" set :rbenv_ruby, File.read('.ruby-version').strip # Nginxの設定ファイル名と置き場所を修正 set :nginx_config_name, "#{fetch(:application)}.conf" set :nginx_sites_enabled_path, "/etc/nginx/conf.d" append :linked_files, "config/master.key" append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "node_modules" # Default branch is :master # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp # Default deploy_to directory is /var/www/my_app_name # set :deploy_to, "/var/www/my_app_name" # Default value for :format is :airbrussh. # set :format, :airbrussh # You can configure the Airbrussh format using :format_options. # These are the defaults. # set :format_options, command_output: true, log_file: "log/capistrano.log", color: :auto, truncate: :auto # Default value for :pty is false # set :pty, true # Default value for :linked_files is [] # append :linked_files, "config/database.yml" # Default value for linked_dirs is [] # append :linked_dirs, "log", "tmp/pids", "tmp/cache", "tmp/sockets", "public/system" # Default value for default_env is {} # set :default_env, { path: "/opt/ruby/bin:$PATH" } # Default value for local_user is ENV['USER'] # set :local_user, -> { `git config user.name`.chomp } # Default value for keep_releases is 5 # set :keep_releases, 5 # Uncomment the following to require manually verifying the host key before first deploy. # set :ssh_options, verify_host_key: :secure

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

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

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

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

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

guest

回答2

0

サーバにグローバルで環境変数を設定するのではなく、Railsだったらdotenv-railsを使えばいいのではないでしょうか。
グローバルに環境変数設定したらそれは実質グローバル変数なのでお勧めしません。

bkeepers/dotenv
【Rails】dotenv-railsの導入方法と使い方を理解して環境変数を管理しよう!

.envをうっかりコミットしないように.gitignoreに記載することをお忘れなく。

投稿2021/03/16 00:07

yu_1985

総合スコア7588

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

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

ik_ko

2021/03/16 01:06

ご返信ありがとうございます! dotenv-rails使用しているんですが、反映されないのでサーバーに設定しようと思ってました。 当初、group :development, :test doのなかにdotenv-railsのgemを入れていたのですがこれでは動かないのではと思い外に出したのですが、どちらでも現在に記述しても読み込まない状態です。 gemfileは以下のようの内容です。 ```source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.5' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 6.0.3', '>= 6.0.3.4' # Use mysql as the database for Active Record gem 'mysql2', '>= 0.4.4' # Use Puma as the app server gem 'puma', '~> 4.1' # Use SCSS for stylesheets gem 'sass-rails', '>= 6' # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker gem 'webpacker', '~> 4.0' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.7' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use Active Model has_secure_password # gem 'bcrypt', '~> 3.1.7' gem 'active_decorator' gem 'active_model_serializers' gem 'annotate' gem 'devise' gem 'faker' gem 'gimei' gem 'hamlit' gem 'kaminari' # Use Active Storage variant gem 'aws-sdk-s3', require: false gem 'image_processing', '~> 1.2' gem 'mini_magick' gem 'rakuten_web_service' gem 'dotenv-rails' # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.4.2', require: false gem 'ransack' ```
ik_ko

2021/03/16 01:18

railsコンソールで環境変数を取得できることも確認できているのですが、、、
yu_1985

2021/03/16 01:22

> railsコンソールで環境変数を取得できる であれば、設定してある環境変数をきちんと使えていないのでは? おそらくdatabase.ymlで設定してるのかと思いますが、それを本文に追記してください。
ik_ko

2021/03/16 01:41

早急なご返答ありがとうございます! はい。僕もそう思い、database.ymlを何度も見直しているのですが間違えがないようにと思えまして。。 すみませんよろしくお願いします。 .envとdatabase.ymlを追記させて頂きます 以下database.yml(production)の部分を抜粋しました ``` production: adapter: mysql2 encoding: utf8mb4 pool: 5 database: sdf_app_production username: root password: <%= ENV['RDS_PASSWORD'] %> host: <%= ENV['RDS_ENDPOINT'] %> ``` .envファイル ``` DB_USER = DB_PASSWORD = DB_NAME = LANG = RACK_ENV = RAILS_ENV RAILS_LOG_TO_STDOUT = RAILS_SERVE_STATIC_FILES = SDF_APP_DATABASE_PASSWORD = DATABASE_URL = SECRET_KEY_BASE = AWS_ACCESS_KEY = AWS_SECRET_KEY = AWS_BUCKET_NAME = RDS_PASSWORD = RDS_ENDPOINT = ``` となります。 よろしくお願いします。
yu_1985

2021/03/16 02:24

抜粋しないで全部貼ってほしいのと、書いたとおり本文の方に貼って欲しいです。 こちらではシンタックスハイライトが効きません。 .envは何も値がセットされてないように見えますが、それは記載の段階で消してるんでしょうか?
ik_ko

2021/03/16 02:33

すみません! 本文に追記しました! .envは記載の段階で削除しています。
yu_1985

2021/03/16 03:06

うーん、ちゃんとenvironmentをちゃんとproductionにして起動してますか? Railsを起動したコマンドをそのまま貼ってください。 あと、sshの件はこの問題と関係ないはずです。多分鍵のパスの指定ミスとかじゃないですかね。
ik_ko

2021/03/16 03:30 編集

sshの件は了解しました。 すいません。railsの起動したコマンドがよくわからないのですが、開発環境のサーバーを動かすときは rails s でサーバーを起動させます。 EC2へデプロイをするときはEC2を起動させて bundle exec cap production deploy のコマンドしか使っていないのですが、、 デプロイ前に本番環境のサーバーを起動させるということでしょうか? 知識がなくすみません。
yu_1985

2021/03/16 03:42

.envにはDATABASE_URLが指定してありますけど、それと設定がバッティングしてないですか? DATABASE_URLを消してやり直してみたらどうなりますかね。 https://railsguides.jp/configuring.html
ik_ko

2021/03/16 03:52

DATABASE_URLを消して行いましたが、結果は同じエラーで変わりませんでした。。
ik_ko

2021/03/16 04:03 編集

このDATABASE_URLなんですが、herokuでデプロイするときに作成したんですが,その後AWSにデプロイするため必要ないと思い,herokuの方で紐付いているアプリを削除したときに、DATABASE_URLでエラーが起きたため、その後DATABASE_URLの編集したらエラーが起こらなくなってから何も編集していない状態なのですが、これが何か競合しているとか可能性あるでしょうか?
yu_1985

2021/03/16 04:19

貼ったドキュメントを見てほしいのですが、DATABASE_URLが設定してあるとそちらが優先されてしまうようです。 今回使いたいのはDATABASE_URLではないので、バッティングする可能性をなくすために消してください、と書きました。 herokuの方でも同じようにバッティングしていた可能性はありますね。
ik_ko

2021/03/16 04:26

ありがとうございます。 DATABASE_URLを削除して行ってもproductionの環境変数が読み込まれない状況です。。 他に何か原因となる要素はあるのでしょうか。。
yu_1985

2021/03/16 04:33

deploy.rbはどうなってますか? ちゃんと想定した環境で実行できているのかが気になります。
ik_ko

2021/03/16 04:37

ご対応頂き本当にありがとうございます。 本文にdeploy.rb追記させて頂きます。
guest

0

@ip-10-0-0-55 って EC2ではなく、localのPCですね?
ssh -i ~/.ssh/sdf_app.pem としても だめですか?

投稿2021/03/15 22:57

winterboum

総合スコア23567

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

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

ik_ko

2021/03/16 01:16

EC2側のサーバーで行ってました。が違うのでしょうか? EC2側に設定したいのでEC2で行っていました。 以下どちらの環境でも行ったのですが見つからないようです。。 EC2 ``` [kosuke@ip-10-0-0-55 ~]$ ssh -i .ssh/sdf_app.pem Warning: Identity file .ssh/sdf_app.pem not accessible: No such file or directory. usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command] ``` ローカル ``` sdf-app % ssh -i ~/.ssh/sdf_app.pem usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination [command] ```
winterboum

2021/03/16 09:06

ssh -i .ssh/sdf_app.pem で何をしたいのですか? EC2にsshでLoginですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問