假设我有应用程序。'A' 用 Rails3.2 编写,还有另一个应用程序。'B' 也是 Rails,我有一个 sqlite3 数据库,其中包含用户 [user_d,值] 表,我想要的是:我想从应用程序中搜索一些信息。'A' 使用 app 中的 user_id。'乙'。
请。帮助
假设我有应用程序。'A' 用 Rails3.2 编写,还有另一个应用程序。'B' 也是 Rails,我有一个 sqlite3 数据库,其中包含用户 [user_d,值] 表,我想要的是:我想从应用程序中搜索一些信息。'A' 使用 app 中的 user_id。'乙'。
请。帮助
您需要定义会话的连接以指向您的表 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'
如果您使用 Rails 4 和 Authlogic,则可以在应用 B 中使用此解决方案来共享用户会话和用户,假设您在两个应用(应用 A 和应用 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 中,您需要一个连接到users
应用程序 A 数据库中的表的用户模型:
# 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
最后,为了向您展示最后一块拼图是如何组合在一起的,这里是应用程序 B 的示例 database.yml 文件(注意:所有这些文件都在应用程序 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
有人!:)