【问题标题】:simple way to initialize rails application on rake db:create在 rake db:create 上初始化 Rails 应用程序的简单方法
【发布时间】:2012-06-07 10:05:02
【问题描述】:

我编写了我的 rails (3.2.3) 应用程序...

config/application.rb:

# ...

class MyWebApp
  class Application < Rails::Application

    # ...

    config.before_initialize do
      $my_config = MyConfig.new
    end
  end
end

config/database.yml:

development:
  adapter: mysql2
  encoding: utf8
  reconnect: true
  database: <%=$my_config.config['db']['basename']%>_development
  pool: 5
  username: <%=$my_config.config['db']['username']%>
  password:
  socket: /var/run/mysqld/mysqld.sock

然后,rake db:create raises:

rake aborted!
undefined method `config' for nil:NilClass
(erb):15:in `<main>'
/home/sn/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/erb.rb:838:in `eval'
/home/sn/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/erb.rb:838:in `result'
/home/sn/dev/mywebapp/vendor/bundle/ruby/1.9.1/gems/railties-3.2.3/lib/rails/application/configuration.rb:115:in `database_configuration'
...

我手动创建数据库后,rake db:migrate 成功。所以我阅读了 databases.rake 并发现 db:migrate 调用 :environment task 但 db:create 没有。

activerecord-3.2.3/lib/active_record/railties/databases.rake:

task :create => :load_config do
  configs_for_environment.each { |config| create_database(config) }
  ActiveRecord::Base.establish_connection(configs_for_environment.first)
end

task :migrate => [:environment, :load_config] do
  ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
  ActiveRecord::Migrator.migrate(ActiveRecord::Migrator.migrations_paths, ENV["VERSION"] ? ENV["VERSION"].to_i : nil) do |migration|
    ENV["SCOPE"].blank? || (ENV["SCOPE"] == migration.scope)
  end
end

你知道在 rake db:create 上正确初始化 $my_config 变量的简单方法吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    你可以给任务添加依赖,试着把这行放在你的 Rakefile 的末尾:

    namespace :db do 
      task :create => [:environment, :load_config]
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 2015-08-15
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      相关资源
      最近更新 更多