Есть ли параметр для ActiveRecord :: Base.configurations илиуждение_коннекции (), который принудительно гарантирует, что НИКАКАЯ запись в базу данных невозможна?(Если это имеет значение, то это база данных Heroku Postgres)
Вспомогательному приложению Sinatra (использующему ActiveRecord 5.2) требуется строго доступ только для чтения к базе данных Heroku Postgres, используемой основным приложением... например, даже если ошибка кода случайно пытается записать изменение, нам нужно, чтобы оно не сработало.
Совет в нескольких потоках SO - определять чтение только для чтения?метод, как показано ниже.
Это ПОЧТИ работает ... с одним важным исключением ...
Хотя это предотвращает сохранение или атрибуты update_attributes, оно НЕ препятствует записи update_column.
APP_DB_HASH = {
"appdb"=>
{ "adapter"=>"postgresql",
"encoding" => "unicode",
"pool" => 5,
"url"=> ENV["APP_DATABASE_URL"] },
ActiveRecord::Base.configurations["appdb"] = {
:adapter => APP_DB_HASH["appdb"]["adapter"],
:encoding => APP_DB_HASH["appdb"]["encoding"],
:database => uri.path.gsub('/',''),
:username => uri.user,
:password => uri.password,
:port => uri.port,
:host => uri.host
}
class AppBase < ActiveRecord::Base
self.abstract_class = true
establish_connection configurations["appdb"]
# THIS DOES NOT PREVENT update_column FROM WRITING TO DATABASE!
def readonly?
true
end
end
class MyModel << AppBase
...
end
результаты:
> rec = MyModel.first.foo
# false
> rec.update_attributes foo: true
# GOOD: exception thrown, prevents write
> rec.foo = true
> rec.save
# GOOD: exception thrown, prevents write
> rec.update_column :foo, true
# FAIL: THE 'READONLY" DATABASE GETS WRITTEN