![Create React App Officially Deprecated Amid React 19 Compatibility Issues](https://cdn.sanity.io/images/cgdhsj6q/production/04fa08cf844d798abc0e1a6391c129363cc7e2ab-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Switching database connection between readonly one and writable one.
switch_point won't support upcoming ActiveRecord v6.1 or later. Developers should use the builtin multiple database feature introduced in ActiveRecord v6.0. https://guides.rubyonrails.org/active_record_multiple_databases.html Thus the supported ActiveRecord version is v3.2, v4.0, v4.1, v4.2, v5.0, v5.1, and v5.2.
switch_point won't accept any new features. Bug fixes might be accepted. If you'd like to add a new feature (and/or support ActiveRecord >= v6.1), feel free to fork switch_point gem.
Add this line to your application's Gemfile:
gem 'switch_point'
And then execute:
$ bundle
Or install it yourself as:
$ gem install switch_point
Suppose you have 4 databases: db-blog-master, db-blog-slave, db-comment-master and db-comment-slave. Article model and Category model are stored in db-blog-{master,slave} and Comment model is stored in db-comment-{master,slave}.
In database.yml:
production_blog_master:
adapter: mysql2
username: blog_writable
host: db-blog-master
production_blog_slave:
adapter: mysql2
username: blog_readonly
host: db-blog-slave
production_comment_master:
...
In initializer:
SwitchPoint.configure do |config|
config.define_switch_point :blog,
readonly: :"#{Rails.env}_blog_slave",
writable: :"#{Rails.env}_blog_master"
config.define_switch_point :comment,
readonly: :"#{Rails.env}_comment_slave",
writable: :"#{Rails.env}_comment_master"
end
In models:
class Article < ActiveRecord::Base
use_switch_point :blog
end
class Category < ActiveRecord::Base
use_switch_point :blog
end
class Comment < ActiveRecord::Base
use_switch_point :comment
end
Article.with_readonly { Article.first } # Read from db-blog-slave
Category.with_readonly { Category.first } # Also read from db-blog-slave
Comment.with_readonly { Comment.first } # Read from db-comment-slave
Article.with_readonly do
article = Article.first # Read from db-blog-slave
article.title = 'new title'
Article.with_writable do
article.save! # Write to db-blog-master
article.reload # Read from db-blog-master
Category.first # Read from db-blog-master
end
end
Note that Article and Category shares their connections.
Model.cache
and Model.uncached
enables/disables query cache for both
readonly connection and writable connection.
switch_point also provide a rack middleware SwitchPoint::QueryCache
similar
to ActiveRecord::QueryCache
. It enables query cache for all models using
switch_point.
# Replace ActiveRecord::QueryCache with SwitchPoint::QueryCache
config.middleware.swap ActiveRecord::QueryCache, SwitchPoint::QueryCache
# Enable query cache for :nanika1 only.
config.middleware.swap ActiveRecord::QueryCache, SwitchPoint::QueryCache, [:nanika1]
auto_writable
is disabled by default.
When auto_writable
is enabled, destructive queries is sent to writable connection even in readonly mode.
But it does NOT work well on transactions.
Suppose after_save
callback is set to User model. When User.create
is called, it proceeds as follows.
Model has several connection-related methods: connection_handler
, connection_pool
, connected?
and so on.
Since only connection
method is monkey-patched, other connection-related methods doesn't work properly.
If you'd like to use those methods, send it to Model.switch_point_proxy.model_for_connection
.
There's a proxy which holds two connections: readonly one and writable one. A proxy has a thread-local state indicating the current mode: readonly or writable.
Each ActiveRecord model refers to a proxy.
ActiveRecord::Base.connection
is hooked and delegated to the referred proxy.
When the writable connection is requested to execute destructive query, the readonly connection clears its query cache.
Basically, each connection managed by a proxy isn't shared between proxies. But there's one exception: ActiveRecord::Base.
If :writable
key is omitted (e.g., Nanika1 model in spec/models), it uses ActiveRecord::Base.connection
as writable one.
When ActiveRecord::Base.connection
is requested to execute destructive query, all readonly connections managed by a proxy which uses ActiveRecord::Base.connection
as a writable connection clear query cache.
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)FAQs
Unknown package
We found that switch_point demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.