我有一些需要在线编辑的数据(即不能是种子),但在所有环境中也需要相同。到目前为止,我发现的唯一的东西是has_alter_ego宝石,但它似乎不再受支持了。
示例:
我对开发数据库中的default_settings表做了很多更改
我想将仅这些更改从我的开发转移到生产数据库(而不是其他包含测试数据的表)
除非有办法从网上编辑种子,否则我宁愿不使用种子
我正在考虑的一个选项是拥有一个单独的数据库。
任何人都有这个问题的干净解决方案吗?谢谢!
答案 0 :(得分:1)
如何定义第二个sqlite3数据库,该数据库仅在此表中使用您的应用程序签入,并将其用于所有三种环境?例如,sqlite3文件可以命名为other_db.sqlite3:
配置/ database.yml中:
... (your other settings for dev, test, and prod databases)
other_db:
database: db/other_db.sqlite3
adapter: sqlite3
timeout: 5000
应用程序/模型/ external.rb:
class External < ActiveRecord::Base
self.abstract_class = true
establish_connection :other_db
end
应用程序/模型/ cross_environment_data.rb
class CrossEnvironmentData < External
...
end
答案 1 :(得分:0)
在这种情况下(虽然完全不鼓励),我会把它放在迁移中。
/db/migrate/_edit_data.rb
class EditData < ActiveRecord::Migration
def self.up
<Do your edits here>
end
def self.down
<undo edits here>
end
end
然后:
rake db:migrate
现在,您在所有环境中拥有相同的数据。
例如,如果您想在Post.text的所有记录中将一些文本附加到一大块文本的末尾。
script/generate migration append_text
/db/migrate/_append_text.rb
class AppendText < ActiveRecord::Migration
def self.up
Post.each{ |p| p.update_attribute(:text, "#{p.text} my additional text")}
end
def self.down
raise ActiveRecord::IrreversibleMigration
end
end
当你跑步时:
rake db:migrate
在开发时,更改将相应地传播,当您部署到其他环境时,您将必须运行相同的命令,他们将收到相同的更改。这更像是一次不可逆转的迁移,因为您无法验证自迁移之后数据是否发生了变化,因此请确保这是您要执行的操作(在dev上运行)=)
新解决方案:
https://github.com/ricardochimal/taps
如果要传输表格列表
$ taps push postgres://dbuser:dbpassword@localhost/dbname http://httpuser:httppassword@example.com:5000 --tables logs,tags