如何使用'A'Rails应用程序。来自'B'应用程序的数据库

时间:2012-04-04 07:52:47

标签: ruby-on-rails mount

让我说我有app。 'A'用Rails3.2编写,还有另一个应用程序。 'B'也是Rails,我有一个sqlite3数据库,其中包含用户[user_d,value]表,我想要的是:我想从应用程序中搜索一些信息。 'A'使用app中的user_id。 'B'。

PLZ。帮助

2 个答案:

答案 0 :(得分:2)

您需要定义会话的连接以指向表B

connection_to_b = ActiveRecord::Base.establish_connection(
  :adapter  => "sqlite3",
  :database => "db/somedatabase.sqlite3"
)

ActiveRecord::SessionStore::Session.connection = connection_to_b.connection

您也可以定义所需的表格:

ActiveRecord::SessionStore::Session.table_name = 'my_session_table'

答案 1 :(得分:0)

如果你正在使用Rails 4和Authlogic,你可以在app B中使用这个解决方案来共享用户会话和用户,假设你在两个应用程序(app A和app B)之间共享数据库连接。此示例中的所有代码都在应用程序B中。

# app/models/user_session.rb
class UserSession < Authlogic::Base
  ActiveRecord::Base.establish_connection(
      adapter: 'postgresql', # or 'sqlite3' if you prefer
      database: "db/app_a_#{Rails.env}"
  )
  # You may also need / wish for these:
  logout_on_timeout true
  consecutive_failed_logins_limit 10
  authenticate_with User
end

而且,你需要这个:

# config/application.rb - bottom of the file, after the final 'end'
ActionDispatch::Session::ActiveRecordStore.session_class = UserSession

在应用B中,您需要一个用户模型连接到应用A的数据库中的users表:

# app/models/user.rb
class User < ActiveRecord::Base
  establish_connection "app_a_#{Rails.env}".to_sym

  # ... whatever else you wish to include in your User model
end

最后,为了向您展示拼图的最后一块是如何组合在一起的,这里是app B的示例database.yml文件(注意:所有这个文件都在app B中):

# config/database.yml
default: &default
  adapter: postgresql # or sqlite3
  encoding: unicode
  host: localhost
  pool: 5
  timeout: 5000

# Database for app B
development:
  <<: *default
  database: db/app_b_development

test:
  <<: *default
  database: db/app_b_test

production:
  <<: *default
  database: db/app_b_production

# App A's database (containing users and sessions)
app_a_development:
  <<: *default
  database: db/app_a_development

app_a_test:
  <<: *default
  database: db/app_a_test

app_a_production:
  <<: *default
  database: db/app_a_production
HTH有人! :)