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

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

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

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ruby on Rails

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

575閲覧

PythonからRailsのPostgreSQLに接続してPythonで取得したデータを保存したい

katoyu

総合スコア15

Ruby on Rails 5

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ruby on Rails

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/20 10:19

編集2022/01/12 10:55

Python3でツイート群に対してMecabを用いた形態素解析を行い、その結果をRuby on railsを用いてWeb上で表示するアプリケーションを制作しています。

PythonからRailsのPostgreSQLに接続してPythonで取得したデータを保存したいと考えておりますが、接続の段階でうまくいかずにいます。

ディレクトリ構造は以下のようになってます。

twitrend /      ├ db/      ├ config/      │ └ database.yml      ├ db/      │ ├ schema.rb      │ └ migrate/      │  └ 2019055323_create_item.rb      └ postgre.py

主なファイル詳細です。

database.yml

Ruby

1# PostgreSQL. Versions 9.1 and up are supported. 2# 3# Install the pg driver: 4# gem install pg 5# On OS X with Homebrew: 6# gem install pg -- --with-pg-config=/usr/local/bin/pg_config 7# On OS X with MacPorts: 8# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config 9# On Windows: 10# gem install pg 11# Choose the win32 build. 12# Install PostgreSQL and put its /bin directory on your path. 13# 14# Configure Using Gemfile 15# gem 'pg' 16# 17default: &default 18 adapter: postgresql 19 encoding: unicode 20 # For details on connection pooling, see Rails configuration guide 21 # http://guides.rubyonrails.org/configuring.html#database-pooling 22 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 23 24development: 25 <<: *default 26 database: twitrend_development 27 28 # The specified database role being used to connect to postgres. 29 # To create additional roles in postgres see `$ createuser --help`. 30 # When left blank, postgres will use the default role. This is 31 # the same name as the operating system user that initialized the database. 32 #username: twitrend 33 34 # The password associated with the postgres role (username). 35 #password: 36 37 # Connect on a TCP socket. Omitted by default since the client uses a 38 # domain socket that doesn't need configuration. Windows does not have 39 # domain sockets, so uncomment these lines. 40 #host: localhost 41 42 # The TCP port the server listens on. Defaults to 5432. 43 # If your server runs on a different port number, change accordingly. 44 #port: 5432 45 46 # Schema search path. The server defaults to $user,public 47 #schema_search_path: myapp,sharedapp,public 48 49 # Minimum log levels, in increasing order: 50 # debug5, debug4, debug3, debug2, debug1, 51 # log, notice, warning, error, fatal, and panic 52 # Defaults to warning. 53 #min_messages: notice 54 55# Warning: The database defined as "test" will be erased and 56# re-generated from your development database when you run "rake". 57# Do not set this db to the same as development or production. 58test: 59 <<: *default 60 database: twitrend_test 61 62# As with config/secrets.yml, you never want to store sensitive information, 63# like your database password, in your source code. If your source code is 64# ever seen by anyone, they now have access to your database. 65# 66# Instead, provide the password as a unix environment variable when you boot 67# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database 68# for a full rundown on how to provide these environment variables in a 69# production deployment. 70# 71# On Heroku and other platform providers, you may have a full connection URL 72# available as an environment variable. For example: 73# 74# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" 75# 76# You can use this database configuration with: 77# 78# production: 79# url: <%= ENV['DATABASE_URL'] %> 80# 81production: 82 <<: *default 83 database: twitrend_production 84 username: twitrend 85 password: <%= ENV['TWITREND_DATABASE_PASSWORD'] %>

下の方のproduction:以下の要素を引っ張ってきて下記ファイルに反映させました。

Pythonからのpostgreの接続についてはこちらの記事を参考にしました。

postgre.py

Python

1import psycopg2 2 3path = "localhost" 4port = "5432" 5dbname = "twitrend_production" 6user = "twitrend" 7password = "ENV['TWITREND_DATABASE_PASSWORD']" 8 9conText = "host={} port={} dbname={} user={} password={}" 10conText = conText.format(path,port,dbname,user,password) 11connection = psycopg2.connect(conText) 12cur = connection.cursor()

コマンドラインで実行した結果は以下のようになりました。

/twitrend

$ python postgre.py Traceback (most recent call last): File "postgre.py", line 12, in <module> connection = psycopg2.connect(conText) File "/Users/katoyu/.pyenv/versions/anaconda3-5.2.0/lib/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: FATAL: role "twitrend" does not exist

抱えている問題は

  • コマンドラインではroleが存在しないと言われているが、postgre.pyの適切なディレクトリがわからない
  • パスワード(ENV['TWITREND_DATABASE_PASSWORD'])はどこかの.envファイルに設定されているパスワードを引っ張ってきているので間違いなくpythonファイル内ではこの書き方では扱えないので、どういう書き方をすべきか

という二点です。

  • 適切なディレクトリ構成やrole,passwordなどの値の渡し方
  • PythonじゃなくてRubyで書いたらうまくいくぞor楽だぞ

等ご意見いただけたらと思います。

各バージョン

  • Rails 5.2.3
  • Ruby 2.5.5
  • Python 3.6.3
  • psycopg2-2.8.3

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

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

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

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

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

guest

回答3

0

OSの世界とRailsの世界があります。
export TWITREND_DATABASE_PASSWORD = 'aaaaaaaaaaaaaa' はOSの世界で行うことで、そのあと「そのターミナルで」実行するプログラムには TWITREND_DATABASE_PASSWORD が渡されます。
注意! = の前後に空白を入れては駄目です。

Railsでは実行環境を指定しない時は development です。

>開発モードではデフォルトだとuserやpasswordの枠はなく、設定しなくても動作確認できるよ!
というのは、どこでも では無いです。
使っている環境では「developmentとtest用に準備されているDBにパスワードなどが設定されていない」ということです。設定してあるDBの場合は必要になります。

投稿2019/06/20 20:30

winterboum

総合スコア23284

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

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

katoyu

2019/06/21 01:29

理解が曖昧で書き方も微妙になってしまっていました、すみません。 >export TWITREND_DATABASE_PASSWORD = 'aaaaaaaaaaaaaa' はOSの世界で行うことで、そのあと「そのターミナルで」実行するプログラムには TWITREND_DATABASE_PASSWORD が渡されます。 仰る通りです、詳細までありがとうございます。 >注意! = の前後に空白を入れては駄目です。 把握してませんでした、ありがとうございます。 >Railsでは実行環境を指定しない時は development です。 ご丁寧にありがとうございます。 >使っている環境では「developmentとtest用に準備されているDBにパスワードなどが設定されていない」ということです。設定してあるDBの場合は必要になります。 この件については日本語が悪かったです。今回の場合においてはなしで用いることができるが、パスワードが設定されている場合についてはもちろん入力が必要という認識ではありました。
guest

0

ひとまずテスト開発中では動作しましたので自己解決法を。

database.ymlは自動生成してからいじっていないので理解が薄かったのですが、開発モードではデフォルトだとuserやpasswordの枠はなく、設定しなくても動作確認できるよ!ってことでした。(いちいち認証っていうのも大変ってことでしょうか)

うまく動かなかったのですが、rails console test でコンソールを開いてRails.envと打つと開発モードかテストモードか本番モードかがわかるとのことで、おそらく開発モードなのでは?と思い、twitrend_productionからtwitrend_developmentへ変更してuserとpasswordの設定を全てコメントアウトすると、うまくDBに登録することができました。

例のENV['TWITREND_DATABASE_PASSWORD']では、/env/environmentにてexport TWITREND_DATABASE_PASSWORD = 'aaaaaaaaaaaaaa'みたいな指定の仕方をするらしいのですが、僕の環境はenvironmentファイルがなかったので作るのかな?とかそういう感じに思っています。
この辺りはおいおい...

この辺りについて何か他にご意見がありましたらいただきたいので、一応締めずに開けておきたいと思います。

投稿2019/06/20 14:46

katoyu

総合スコア15

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

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

0

> パスワード(ENV['TWITREND_DATABASE_PASSWORD'])はどこかの.envファイルに設定されているパスワードを引っ張ってきているので

確かにそのとおりですが、、、、

パスワードが何であるか、もしくはどこに書かれているかをあなたが知らないとすると、あなたにはDBに直接アクセスする権限が与えられていないということですので、諦めて下さい。

投稿2019/06/20 12:34

winterboum

総合スコア23284

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問