2016-07-03 13 views
0

Wenn die Ruby on Rails-Anwendung gestartet wird, möchte ich, dass es einen Codeblock ausführt, damit die Datenbank mit den erforderlichen Daten gefüllt wird. Ich habe stundenlang nach einer Lösung gesucht, keine der angegebenen Lösungen, die ich gefunden habe. Das Folgende ist die Lösung, die ich implementiert habe.Code auf dem Start eines Rails-Servers ausführen

In application.rb legte ich den folgenden Code-Block:

def fill_db 
    redirect_to url_for(:controller => :item, :action => :init) 
    self.delay(:run_at => 10.minute.from_now).fill_db 
end 

config.after_initialize do 
    redirect_to url_for(:controller => :item, :action => :init) 
    fill_db 
end 

Ich habe versucht, Dutzende von anderen Varianten davon, aber keiner von ihnen gearbeitet zu implementieren.

Der Fehler, den ich bekommen, ist dies:

C:\xampp\htdocs\dev-ruby\untitled1>rails s 
=> Booting WEBrick 
=> Rails 4.2.6 application starting in development on http://localhost:3000 
=> Run `rails server -h` for more startup options 
=> Ctrl-C to shutdown server 
Exiting 
C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/railtie.rb:196:in `method_missing': undefined method `url_for' for Untitled1::Application:Class (NoMethodError) 
     from C:/xampp/htdocs/dev-ruby/untitled1/config/application.rb:40:in `block in <class:Application>' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.2.6/lib/active_support/lazy_load_hooks.rb:36:in `call' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.2.6/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.2.6/lib/active_support/lazy_load_hooks.rb:45:in `block in run_load_hooks' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.2.6/lib/active_support/lazy_load_hooks.rb:44:in `each' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.2.6/lib/active_support/lazy_load_hooks.rb:44:in `run_load_hooks' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/application/finisher.rb:62:in `block in <module:Finisher>' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/initializable.rb:30:in `instance_exec' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/initializable.rb:30:in `run' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/initializable.rb:55:in `block in run_initializers' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:226:in `block in tsort_each' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:427:in `each_strongly_connected_component_from' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:347:in `block in each_strongly_connected_component' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:345:in `each' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:345:in `call' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:345:in `each_strongly_connected_component' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:224:in `tsort_each' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/2.1.0/tsort.rb:205:in `tsort_each' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/initializable.rb:54:in `run_initializers' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/application.rb:352:in `initialize!' 
     from C:/xampp/htdocs/dev-ruby/untitled1/config/environment.rb:5:in `<top (required)>' 
     from C:/xampp/htdocs/dev-ruby/untitled1/config.ru:3:in `require' 
     from C:/xampp/htdocs/dev-ruby/untitled1/config.ru:3:in `block in <main>' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `instance_eval' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/builder.rb:55:in `initialize' 
     from C:/xampp/htdocs/dev-ruby/untitled1/config.ru:in `new' 
     from C:/xampp/htdocs/dev-ruby/untitled1/config.ru:in `<main>' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/builder.rb:49:in `eval' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/builder.rb:49:in `new_from_string' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/builder.rb:40:in `parse_file' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/server.rb:299:in `build_app_and_options_from_config' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/server.rb:208:in `app' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/commands/server.rb:61:in `app' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/server.rb:336:in `wrapped_app' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/commands/server.rb:139:in `log_to_stdout' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/commands/server.rb:78:in `start' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:80:in `block in server' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:75:in `tap' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:75:in `server' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
     from C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.6/lib/rails/commands.rb:17:in `<top (required)>' 
     from bin/rails:4:in `require' 
     from bin/rails:4:in `<main>' 

Der gleiche Code funktioniert in einem Controller, aber dann ist es nicht zu Beginn des Schienen-Server ausgeführt.

+0

Möchten Sie die Datenbank seed? –

+0

Gibt es einen Grund, warum Sie Rake db: seed nicht verwenden? –

Antwort

1

Sie können redirect_to nicht in application.rb verwenden. Dies ist Teil der ActionController-Klassen. Hier sind zwei Dinge, die Sie stattdessen tun können:

1) Implementieren db: seed - es gibt eine db/seed.rb, die Sie verwenden können, um anfängliche Datenbankwerte zu füllen. Nachdem Sie den Code bereitstellen gerade laufen bin/Schienen db: Samen, diese Aufgabe auszuführen, die die Datenbank ausfüllen wird

oder

2) hinzufügen before_action zu Application

class ApplicationController < ActionController::Base 
    before_action :fill_db 
end 

von Um dies zu verhindern Ausführung Methode hinzufügen wie bedingte, wenn nicht ausgefüllt?

Hoffe es hilft

Verwandte Themen