0

異なるデータベース接続があるとしましょう...

今のところ、この例の目的のために、開発のみに関心を持ってみましょう。'rake db:setup'を実行すると、開発が作成されるだけです。これは、rakeタスクの観点からは、他の接続が別の環境であるためです。他の接続をRAILS_ENVとして渡して、データベースを作成することもできます。ただし、問題は、データベース接続をどのように定義したかにあります。これを元に戻すのは、管理と展開がはるかに簡単になるため、やり直したくありません。私たちがやったことはこれです...

database.ymlに、次のコードを追加しました。

databases_file = File.join(Rails.root.to_s, "config", "databases", "#{Rails.env.to_s}.yml")
IO.read(databases_file) if File.exist?(databases_file)

次に、configの下のdatabasesサブフォルダーに、さまざまな環境のymlファイルを作成しました。

したがって、development.ymlには...

development:
  ... details ...

logging:
  ... details ...

ここで、RAILS_ENVを「logging」に設定すると、ファイルはdevelopment.ymlと呼ばれるため、ファイルが読み込まれることはありません。したがって、ロギング接続は検出されません。

これらすべての設定をdatabase.ymlファイルに統合すると、database.ymlをgitリポジトリにチェックインせず、新入社員などのために開発マシンで手動で作成する必要があります。また、展開プロセスを変更して、ファイルを下位環境に配置し始める必要があります。(私たちの生産プロセスはすでにこれをサポートしています)

4

2 に答える 2

0

複数のデータベースがあり、ブランチを多用しています...そこで、複数のデータベースを作成し、それらの名前を作業中のブランチに関連付けるために、このソリューションを思いつきました...

# config/database.yml
<%=
    databases_file = File.join(Rails.root.to_s, "config", "databases", "#{Rails.env.to_s}.yml")
  if Rails.env.development? || Rails.env.test?
    branch = ENV['BRANCH'] || `git branch --no-color 2> /dev/null`.chomp.split("\n").grep(/^[*]/).first[/(\S+)$/,1].sub("-", "_")
    puts "Using databases for #{branch}"
    IO.read(databases_file).gsub!("<branch>", branch) if File.exist?(databases_file)
  else
    IO.read(databases_file) if File.exist?(databases_file)
  end
%>

次に、環境ごとにデータベースファイルを作成します。development.ymlとtest.ymlでは、トークンを使用して、このスクリプトが置換を行うために必要なものを検索できるようにします。したがって、サンプルファイルは次のようになります。

# config/databases/development.yml
development:
  adapter: mysql2
  host: 127.0.0.1
  database: <branch>_dev
  username: user
  password: pass

versions:
  adapter: mysql2
  host: 127.0.0.1
  database: <branch>_versions
  username: user
  password: pass

reporting:
  adapter: mysql2
  host: 127.0.0.1
  database: <branch>_reporting
  username: user
  password: pass

ods:
  adapter: mysql2
  host: 127.0.0.1
  database: <branch>_ods
  username: user
  password: pass

次に、複数のデータベースを処理するようにrakeタスクを拡張しました

これがほとんどの作業が行われた場所です。したがって、私はそれを答えから除外し、あなたにそれのために働かせるつもりです!いいえ、実際には、それは私が誇りに思っておらず、それを修正する時間を望んでいるだけの大きな大きな混乱ですが、何も見つかりませんでした。誰かを間違った道に導いたくはありませんが、質問があれば私にメッセージを送ってください。喜んでお手伝いします。

于 2012-11-12T23:10:51.473 に答える
0

これらを管理するために環境変数を使用できます。次のように定義された単一のdatabase.ymlを持つことができます。

development:
  database: ENV['DEVELOPMENT_DATABASE']

次に、で環境変数を設定します.bashrc/.zshrc

于 2012-04-18T16:03:19.707 に答える