16659


Railsアプリケーションでdb:seedする際にgitで管理していないymlファイル(これはgithubで公開したくないファイル。ここではmaster_data.ymlとします)を用いてDBにデータを入れています。  
そして、このアプリケーションをHerokuにデプロイする際にmaster_data.ymlがないためにdb:seedするとエラーが出てDBにデータを入れられません。

この場合、どのようにしてmaster_data.ymlをHeroku上に上げるのが良いのでしょうか？


CC BY-SA 3.0
2015-09-15T16:25:29.517
16656
2015-09-15T22:22:27.163
9059
question
ruby-on-rails heroku
Herokuにマスターデータファイルを上げたい


S3など外部にyamlファイルを置いてそれを読み込む方法と、ローカルのDBからHerokuにデータを送り込む方法がありそうです。

外部からデータを読み込む場合はseed.rbのコードを変更する必要があります。

[code]

    require 'open-uri'
    
    url = '(yamlファイルのURL)'
    yaml = YAML.load(open(url).read)
    
[/code]

ローカルDB（Postgresであることが前提）のデータをHerokuに送り込む場合は、以下のような手順になります。

[code]

    # ローカルのデータをダンプ
    $ pg_dump --verbose --clean --no-owner --no-acl --format=c (アプリ名)_development > db.dump
    
    # Heroku上のDBに対してリストア（passwordは実行時に入力を要求される）
    $ pg_restore --verbose --clean --no-acl --no-owner -h (host) -U (username) -d (dbname) db.dump
    
[/code]

Heroku DBのhost, username, dbname, passwordはそれぞれ「Herokuの管理画面 => Add-
onsのHeroku::Postgressをクリック」で表示されます。（下図のような画面）

[![画像の説明をここに入力](https://i.stack.imgur.com/zLJCs.png)](https://i.stack.imgur.com/zLJCs.png)

DBのダンプ＆リストアなので、当然開発環境の全データがそのままコピーされます。  
必要に応じてリストア後にデータを整理してください。

マスタデータに複雑な関連がないのであれば、CSVから取り込むことも可能です。

[code]

    $ cat ~/Desktop/users.csv
    Alice,alice@example.com
    Bob,bob@example.com
    
    $ psql `heroku config:get DATABASE_URL --app (Heroku上のアプリ名)` -c "\copy users(name, email) from '~/Desktop/users.csv' ( delimiter E',', format csv, header false )"
    
[/code]

お好みの方法を試してみてください。


CC BY-SA 3.0
2015-09-15T22:14:22.453
16659
2015-09-15T22:22:27.163
2015-09-15T22:22:27.163
85
85
16656
answer