make rake db: создать настройку другой базы данных, кроме разработки, тестирования или производства - PullRequest
0 голосов
/ 24 апреля 2020

Я использую rails 4.2 и пытаюсь настроить (в уже установленном приложении) Audited Gem, следуя этому второму подходу к базе данных .

Мой файл config / database.yml был как следует:

default: &default
  adapter: mysql2
  pool: 5
  timeout: 5000

development:
  <<: *default
  host:  <%= ENV["MYSQL_HOST"] %>
  username: <%= ENV["MYSQL_USER"] %>
  password: <%= ENV["MYSQL_PASSWORD"] %>
  database: <%= ENV["MYSQL_DATABASE"] %>

test:
  <<: *default
  host:  <%= ENV["MYSQL_HOST"] %>
  username: <%= ENV["MYSQL_USER"] %>
  password: <%= ENV["MYSQL_PASSWORD"] %>
  database: <%= ENV['TEST_ENV_DB'] %>

И я намереваюсь заставить его работать на другой БД, помимо разработки, тестирования или производства. Однако задача rake db:create только создает мою базу данных для разработки и тестирования. Возможно ли это сделать sh в моей версии rails?

audition:
  <<: *default
  host:  <%= ENV["MYSQL_HOST"] %>
  username: <%= ENV["MYSQL_USER"] %>
  password: <%= ENV["MYSQL_PASSWORD"] %>
  database: <%= ENV["AUDITION_DATABASE"] %>

Обратите внимание на новое имя для базы данных прослушивания

Ответы [ 3 ]

1 голос
/ 24 апреля 2020

если вы хотите читать / записывать в секундную базу данных в rails <6 </p>

создать модуль

module AuditionConn
  def self.included(base)
    base.class_eval do
     if Rails.env == 'development'
       establish_connection "audition-development" # database.yml
      else
       establish_connection "audition-production" # database.yml
      end
    end
  end
end

, а затем включить его в любую модель, из которой вы хотите читать / писать из / в базу данных для прослушивания

class AuditionDBModel < ActiveRecord::Base
  include AuditionConn
end

миграция для второй базы данных

def up
  AuditionDBModel.connection.create_table ... do |t|
    ...

  AuditionDBModel.connection.change_column ...
end
0 голосов
/ 26 апреля 2020

Я думаю, что это может помочь вам:
создать другую модель для аудита:

class AuditModel < ActiveRecord::Base
  connects_to database: { writing: :audit_db, reading: :audit_db}
end

или

ActiveRecord::Base.establish_connection(
  adapter:  "mysql2",
  host:     "localhost",
  username: "myuser",
  password: "mypass",
  database: "somedatabase"
)

для деталей: https://guides.rubyonrails.org/active_record_multiple_databases.html https://edgeapi.rubyonrails.org/classes/ActiveRecord/ConnectionHandling.html

0 голосов
/ 24 апреля 2020

Я думаю, что вы хотите создать новую среду, позвоните audition, верно?!.

  • Клонируйте существующий файл среды, например, config/environments/test.rb и переименуйте его config/environments/audition.rb
  • Добавьте новый блок конфигурации в config / database.yml для вашей среды.
  • Обновите любой другой файл конфигурации, который вы можете иметь в папке config, с вашей новой средой, некоторые гемы должны сконфигурировать его .

  • Теперь вы можете запустить сервер

rails server -e audition

...