質問: Railsアプリケーションでdb:seedする際にgitで管理していないymlファイル(これはgithubで公開したくないファイル。ここではmaster_data.ymlとします)を用いてDBにデータを入れています。 そして、このアプリケーションをHerokuにデプロイする際にmaster_data.ymlがないためにdb:seedするとエラーが出てDBにデータを入れられません。 この場合、どのようにしてmaster_data.ymlをHeroku上に上げるのが良いのでしょうか?
回答: S3など外部にyamlファイルを置いてそれを読み込む方法と、ローカルのDBからHerokuにデータを送り込む方法がありそうです。 外部からデータを読み込む場合はseed.rbのコードを変更する必要があります。 ``` require 'open-uri' url = '(yamlファイルのURL)' yaml = YAML.load(open(url).read) ``` ローカルDB(Postgresであることが前提)のデータをHerokuに送り込む場合は、以下のような手順になります。 ``` # ローカルのデータをダンプ $ 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 ``` Heroku DBのhost, username, dbname, passwordはそれぞれ「Herokuの管理画面 => Add-onsのHeroku::Postgressをクリック」で表示されます。(下図のような画面) !画像の説明をここに入力 DBのダンプ&リストアなので、当然開発環境の全データがそのままコピーされます。 必要に応じてリストア後にデータを整理してください。 マスタデータに複雑な関連がないのであれば、CSVから取り込むことも可能です。 ``` $ 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 )" ``` お好みの方法を試してみてください。