2012-06-07 2 views
1

я писал свои рельсы (3.2.3) приложения ...простой способ инициализации приложения рельсы на грабли БД: создать

конфигурации/application.rb:

# ... 

class MyWebApp 
    class Application < Rails::Application 

    # ... 

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

конфигурации/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 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 успешно завершается. Поэтому я прочитал database.rake и обнаружил, что db: migrate calls: задача среды, но db: create does not.

ActiveRecord-3.2.3/Библиотека/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 

Знаете ли вы какой-нибудь простой способ правильно инициализировать переменную $ my_config на грабли БД: создать?

ответ

0

вы можете добавить зависимости для задач, попробуйте поставить эту строку в конце вашего Rakefile:

namespace :db do 
    task :create => [:environment, :load_config] 
end 
Смежные вопросы