2013-02-09 64 views
1

我在本地运行这个迁移文件,并且遇到了问题,因为部分是因为我使用Sqlite3而无法运行的MySQL。我想确保SQL仅在生产中运行,而不是在开发中运行。我明白我需要包装的这部分与此评论这样我就可以成功运行此迁移:Rails将迁移文件注释掉以便开发?

unless Rails.env == "development". 

我如何添加这下面的脚本?

class Places < ActiveRecord::Migration 
     def self.up 
     create_table :countries do |t| 
      t.string :name, :limit => 50, :null => false 
      t.string :fips104, :limit => 2, :null => false 
      t.string :iso2, :limit => 2, :null => false 
      t.string :iso3, :limit => 3, :null => false 
      t.string :ison, :limit => 4, :null => false 
      t.string :internet, :limit => 2, :null => false 
      t.string :capital, :limit => 25 
      t.string :map_reference, :limit => 50 
      t.string :nationality_singular, :limit => 35 
      t.string :nationaiity_plural, :limit => 35 
      t.string :currency, :limit => 30 
      t.string :currency_code, :limit => 3 
      t.integer :population 
      t.string :title, :limit => 50 
      t.string :comment, :limit => 255 

      t.timestamps 
     end 

     create_table :regions do |t| 
      t.references :country, :null => false 
      t.string :name, :limit => 45, :null => false 
      t.string :code, :limit => 8, :null => false 
      t.string :adm1code, :limit => 4, :null => false 

      t.timestamps 
     end 

     create_table :cities do |t| 
      t.references :country, :null => false 
      t.references :region, :null => false 
      t.string :name, :limit => 45, :null => false 
      t.float :latitude, :null => false 
      t.float :longitude, :null => false 
      t.string :timezone, :limit => 10, :null => false 
      t.integer :dma_id 
      t.string :county, :limit => 25 
      t.string :code, :limit => 4 

      t.timestamps 
     end 
     add_index :cities, :name 


     execute "LOAD DATA INFILE '#{RAILS_ROOT}/db/migrate/Countries.txt' INTO TABLE countries 
      FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;" 

     execute "LOAD DATA INFILE '#{RAILS_ROOT}/db/migrate/Regions.txt' INTO TABLE regions 
      FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;" 

     execute "LOAD DATA INFILE '#{RAILS_ROOT}/db/migrate/Cities.txt' INTO TABLE cities 
      FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;" 


     end 

     def self.down 
     drop_table :countries 
     drop_table :regions 
     drop_table :cities 
     end 
    end 
+0

你为什么要这么做? – codeit 2013-02-09 03:49:28

+0

该脚本正在使用mysql语法,它在开发中不适用于Sqlite3。因此,我想将进口脚本注释掉以便直接将csv文件导入数据库。 – 2013-02-09 03:51:07

+0

哪个db是你在测试中使用?你需要测试吗? – codeit 2013-02-09 03:53:19

回答

2

在你self.up方法可以检查environment象下面这样:

if Rails.env.production? 
    #your mysql code which runs only in production env 
    end