使用sqlite3进行本地开发。 Prod DB是MySql。
拥有一个用于列更改的迁移文件。
class ChangeDateToOrders < ActiveRecord::Migration
def self.up
change_column(:orders, :closed_date, :datetime)
end
def self.down
change_column(:orders, :closed_date, :date)
end
end
错误说index name 'temp_index_altered_orders_on_closed_location_id_and_parent_company_id' on table 'altered_orders' is too long; the limit is 64 characters
知道sqlite对索引名称有限制,但是有解决方法吗?
EDIT 我使用的解决方法。
class ChangeDateToOrders < ActiveRecord::Migration
def self.up
remove_index(:orders, [:closed_location_id, :parent_company_id])
change_column(:orders, :closed_date, :datetime)
add_index(:orders, [:closed_location_id, :parent_company_id], :name => "add_index_to_orders_cli_pci")
end
def self.down
remove_index(:orders, :name => "add_index_to_orders_cli_pci")
change_column(:orders, :closed_date, :date)
add_index(:orders, [:closed_location_id, :parent_company_id])
end
end
答案 0 :(得分:1)
就个人而言,我喜欢我的生产和开发环境尽可能匹配。它有助于避免陷阱。如果我正在部署MySQL,我也会用MySQL运行我的开发环境。此外,我对SQLite也不是很熟悉所以这种方法对我懒惰的方面很有吸引力 - 我只需要知道一个db的来龙去脉。
答案 1 :(得分:0)
你可以破解你的活动记录副本;添加以下
opts[:name] = opts[:name][0..63] # can't be more than 64 chars long
$ GEM_HOME / gems / activerecord-3.2.9 / lib / active_record / connection_adapters / sqlite_adapter.rb的第535行(版本3.2.9)
这是一个黑客,但它可能会让你超越障碍。如果我有更多时间,我会考虑编写测试并向rails核心团队发送拉取请求。