oct*_*ian 4 rake ruby-on-rails
我想执行两个rake任务,在服务器启动时初始化我的数据库.因此,我将以下代码放入config/application.rb:
config.after_initialize do
Rake::Task[ 'download_csv:get_files' ].invoke
Rake::Task[ 'download_csv:place_in_database' ].invoke
end
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task_manager.rb:62:in `[]': Don't know how to build task 'download_csv:get_files' (RuntimeError)
Run Code Online (Sandbox Code Playgroud)
我做错了什么?(我的目标是在启动时初始化数据库).
Rails任务不会自动加载,您需要先加载它们:
config.after_initialize do
Rails.application.load_tasks # <---
Rake::Task['download_csv:get_files'].invoke
Rake::Task['download_csv:place_in_database'].invoke
end
Run Code Online (Sandbox Code Playgroud)
请注意,#load_tasks不存储状态,如果您在其他地方再次调用它,则可能会遇到问题.
另一方面,任务的名称表明它们不需要在每个Web实例上运行(例如Heroku Dynos); 但是他们将使用上述策略在每台机器上运行.因此,如果您扩展了Web实例(在多台计算机上运行您的应用程序),则在单个实例(Hero上的一次性Dyno)上运行这些任务作为自动化的部署后任务会更有效.
download_csv:place_in_database意味着有一个place_in_database命名空间内命名的任务download_csv。这就是你的 Rake 任务的样子吗?如果您发布代码,诊断问题会容易得多。
另外,请确保您的.rake文件位于lib/tasks.
| 归档时间: |
|
| 查看次数: |
2989 次 |
| 最近记录: |