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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

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

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Q&A

解決済

2回答

868閲覧

[heroku × Rails5] net/sshで外部接続するとSocketErrorになります

ucndev

総合スコア14

Ruby on Rails 5

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

Ruby

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

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

0グッド

0クリップ

投稿2018/08/24 05:43

編集2018/08/31 09:13

閲覧ありがとうございます。
しかし回答がつかず、へこみ気味です。。。

もしかしたら、質問が悪いのでしょうか!?
そもそも質問すべき問題ではないとか??
初心者アピールが過ぎるとか??

いろいろ考えてしまいます。。。

もうこの質問へのご回答は結構ですので、もし可能でしたら、今後のためにどうすれば・どのような情報を追加すれば・どう聞き方を変えればご回答いただきやすいのかをアドバイスいただけますと幸いです・・・

貴重なお時間、ありがとうございます。

前提・実現したいこと

herokuもrailsもrubyも初心者です。

heroku上で稼働するrailsアプリケーションを作っています。

  • heroku
  • Rails5.2.1
  • Ruby2.4.0

railsで構築した管理画面のようなページからアップしたファイルを外部サーバにscpで送りたいと考えております。
その前段階として疎通の確認をするため、接続先に"ls"を投げて結果を表示する処理を書いたのですが、
エラーになり接続できないようです。

ローカルのdevelop環境では問題なく接続もlsの結果表示もscpもできました。

(接続先サーバはIP制限をかけているため、heroku環境ではProximoでIPを固定し、それをIP制限から除外しています)

何かヒントだけでもご教示いただけますと幸いです。

発生している問題・エラーメッセージ

SocketError : getaddrinfo: Name or service not known

該当のソースコード

rb

1require 'net/ssh' 2require 'net/scp' 3require 'net/ssh/proxy/http' 4require 'logger' 5 6class Mytest 7 HOST = ENV["MY_HOST"]# '0.0.0.0'のようなIPアドレスです 8 USER = ENV["MY_USER"] 9 PW = ENV["MY_PASS"] 10 11 SEC_KEY = { 12 stg: ENV["MY_PRIVATE_KEY"]# 秘密鍵の中身をconfig:setしています 13 } 14 15 def connect_test 16 logger = Logger.new(STDOUT) 17 proxy = Net::SSH::Proxy::HTTP.new(ENV['PROXIMO_URL']) 18 opt = { 19 passphrase: PW, 20 keys: [], 21 proxy: Rails.env.development? ? nil : proxy, 22 port: 22, 23 logger: logger, 24 verbose: :info, 25 key_data: [ SEC_KEY[:stg] ] 26 } 27 28 Net::SSH.start( HOST, USER, opt ) do |ssh| 29 result = ssh.exec!('ls -R') 30 p result 31 end 32 end 33end 34

試したこと

エラーメッセージで検索すると「resolv-replace.rb」という標準ライブラリに言及した記事が多くヒットするのですが、意味も使い方もわからず試せていません。

補足情報(FW/ツールのバージョンなど)

  • rails (5.2.1)
  • net-ssh (5.0.2)
  • net-scp (1.2.1)

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

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

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

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

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

takumiabe

2018/09/01 03:23

エラーならbacktraceなどがあればもう少し分かる人がいるのかもしれません。
guest

回答2

0

質問内容が若干ニッチ・というか質問者さんの環境固有の事情が多そうなので回答する人がいない感じですかね。

AWSのS3へファイルを保存するとかならいくらでも回答つくと思うのですが、 外部サーバ の詳細が質問内容からあまり読み取れないです。

素直に情報の多いやり方に変更するというのも一つの手ですし、「そもそもやり方を変えたら?」というのも回答としては有り得るので、
その外部サーバへscpでファイルを転送するという方法を絶対に変更できない事情があればそれも併記すると良いかもしれません。

投稿2018/09/01 04:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ucndev

2018/09/04 08:25

ご回答くださり、ありがとうございます。 接続先サーバは外部業者が数年前に設定してくれたS3なのですが、今回その業者に相談・質問できていないのも情報が漠然としたものになった理由のひとつなのだとわかりました。 コードにばかり注目していたので、接続先にまで思いが至りませんでした・・・接続先の設定や状況によって原因の所在や対処が異なるのは当然ですよね。 また、他の方法ではダメな事情の併記というのも、回答されやすさにつながると思いました。(どうしてもその問題の回答が欲しいなら) お答えいただきやすい質問の仕方を考えていくことで自分自身の解決力も上がるような気がしますので、いただいたご指摘を参考に改善してまいりたいです。
guest

0

ベストアンサー

getaddrinfo はDNSの際に使われるものなので、HOST や PROXIMO_URLが誤っているのではないでしょうか。

ただ、heroku環境には疎いので、heroku環境下で外部への接続が制限されている可能性も無くはないのかな?と思います。

投稿2018/09/01 03:21

takumiabe

総合スコア661

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

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

ucndev

2018/09/04 02:50 編集

ご回答くださり、ありがとうございます。 プログラムに詳しい皆様が問題に対してどのように考えられるのかを知れるだけでもとてもありがたいです。 今回scpで接続した先は静的ページを外部に公開しているS3につながるのですが、こちらはローカル(winSCP / Filezilla)からsshで接続できましたので、HOSTは問題なさそうです。 またherokuからFaraday(adapter: net_http)を使って同じPROXIMO_URLを経由し同じHOST(の公開用ディレクトリ)につながったので、プロキシも問題ないような気がしております。 今回はhostに"hoge.com"のようなドメインではなくIPアドレスをセットしているので、そもそもドメインの名前解決をする(?)getaddrinfoが登場している事自体ちんぷんかんぷんで、ここで思考停止状態になってしまいました。 接続先のS3は外部業者が設定したものを使っており、今回同業者に相談できないため、接続先側の問題の可能性も考えられますね。 いずれにしましても、サーバやDNSの事を勉強せずherokuに手を出したのが甘ちゃんだったかもしれません。勉強し直します。
takumiabe

2018/09/05 01:52

getaddrinfoはドメイン名以外にもIPも扱えるようでした。失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問