草庐IT

延迟任务

全部标签

ruby - Capistrano 检查任务中 undefined variable

在使用多阶段扩展的Capistrano中,我有两个环境:生产和测试。我在testing.rb中需要一些在prod.rb中不需要的变量,我希望我的一些任务能够检查变量是否已定义并在定义时使用它,但在定义时忽略它未设置。所以,在testing.rb中,我会有类似的东西:set:foo,'bar'prod.rb不会引用:foo因为它不需要它。在我的一项任务中,我想做类似的事情:ifdefined?(foo)#dosomethingwithfooelse#dosomethingwithoutfooend但我一直收到错误:undefinedlocalvariableormethod'foo'有没

ruby - 任务依赖性是否总是以特定顺序与 rake 一起运行?

我有以下示例,它基于我希望我的rakefile使用的结构:task:defaultdoputs'Tasksyoucanrun:dev,stage,prod'endtask:dev=>[:init,:devrun,:clean]task:devrundoputs'Devstuff'endtask:stage=>[:init,:stagerun,:clean]task:stagerundoputs'Stagingstuff'endtask:prod=>[:init,:prodrun,:clean]task:prodrundoputs'Productionstuff'endtask:init

ruby-on-rails - 如何在 Ruby 中为模型创建延迟加载属性?

我想创建一个延迟加载的属性,它返回模型上的一个集合,我该怎么做?我不想为此创建关联。所以我希望它返回一个集合,如果集合还没有被初始化然后访问数据库,返回行,然后初始化它。如果它运行一次,则无需再次运行它,因为下一个页面请求将重新开始。 最佳答案 添加实例属性(例如@my_attribute)然后定义defmy_attribute@my_attribute||=initialize_my_attributeend(注意:initialize_my_attribute是您实现的函数/方法,它将加载您想要的值。)这是如何工作的:该属性以一

ruby-on-rails - 如何在我的 Rails 应用程序中运行 rake 任务

我想做的事情:在model.rb中,在after_commit中,我想运行rake任务ts:reindexts:reindex通常使用rakets:index运行 最佳答案 如果您希望此rake代码在请求周期内运行,那么您应该避免通过system或任何exec系列(包括反引号)运行rake,因为这将启动一个新的ruby​​解释器并重新加载每次调用Rails环境。相反,您可以直接调用Rake命令,如下所示:-require'rake'classSomeModel注意:在Rails4+中,您将使用Rails.root而不是RAILS_R

ruby - 为什么 EventMachine 的延迟比 Ruby 线程慢?

我有两个使用Mechanize获取Google索引页的脚本。我原以为EventMachine会比Ruby线程更快,但事实并非如此。EventMachine代码成本:“0.24s用户0.08s系统2%cpu12.682总计”Ruby线程代码成本:“0.22s用户0.08s系统5%cpu5.167总计”我是否以错误的方式使用了EventMachine?事件机器:require'rubygems'require'mechanize'require'eventmachine'trap("INT"){EM.stop}EM.rundonum=0operation=proc{agent=Mechan

ruby-on-rails - 我如何调用 Rake 中的另一个任务

尽管这听起来可能与您在此处找到的其他问题相似,但还是有细微差别。我有两个目录,比如/home/rails/Rake和/home/rails/test_app。rails目录是我放置所有rails项目的地方。在Rake内部,我有一个Rakefile和一个create.rake文件。这就是我的rakefile的样子namespace:setupdodesc"something"task:initdoprint"Nameofthedestinationdirectory:"name=STDIN.gets.stripcp_r'.',"../#{name}/lib/tasks"cd"../#{n

ruby-on-rails - 从 rake 任务中运行工头

我有以下Rake任务:namespace:foremandotask:devdo`foremanstart-fProcfile.dev`endenddesc"RunForemanusingProcfile.dev"task:foreman=>'foreman:dev'forman命令在shell中运行良好,但是当我运行rakeforeman时,出现以下错误:/Users/me/.gem/ruby/2.0.0/gems/bundler-1.5.2/lib/bundler/rubygems_integration.rb:240:in`blockinreplace_gem':foremani

ruby - rake 任务有 "method_missing"吗?

如果我的Rakefile没有找到具有特定名称的任务,我希望rake根据特定规则使用该名称创建一个新任务,如果一个文件缺少任务名称存在。但如果没有,我想回退到默认值(“不知道如何构建任务'foo'!”)。简而言之,Rake是否有method_missing? 最佳答案 我没试过,但快速搜索显示this.Ifyoudefinearulewithanemptystring,youcancatchanytaskthathasn’tbeendefinedelsewhere.Thismakesiteasytodynamicallycreater

ruby-on-rails - 在时间表中对无限期重复的任务进行建模(类似日历的 Rails 应用程序)

这是一个很大的绊脚石。警告:以下不是问题,而是对我的想法的解释。我的问题是——你有更好的方法吗?是否有一些我不熟悉的常用技术?看起来这是一个微不足道的问题。所以你有任务模型。您可以创建任务、完成任务、销毁任务。然后你有经常性的任务。它就像常规任务一样,但它附加了一个重复规则。但是,任务可以无限期地重复——您可以在计划中提前一年,您应该会看到任务出现。因此,当用户创建一个循环任务时,您不会想在未来百年内构建数千个任务,并将它们保存到数据库中,对吧?所以我开始思考—如何创建它们?一种方法是在您查看日程安排时创建它们。因此,当用户提前一个月移动时,将创建任何重复性任务。当然,这意味着您不能再

ruby-on-rails - 启动或确保延迟作业在应用程序/服务器重新启动时运行

我们必须使用delayed_job(或其他一些后台作业处理器)在后台运行作业,但我们不允许更改服务器上的启动脚本/启动级别。这意味着如果提供程序重新启动服务器,则不能保证守护进程保持可用(因为守护进程将由每次部署仅运行一次的capistrano配方启动)。目前,我能想到的确保delayed_job守护进程始终运行的最佳方法是向我们的Rails应用程序添加一个初始化程序,以检查守护进程是否正在运行。如果它没有运行,那么初始化器会启动守护进程,否则,它就让它保持运行。因此,问题是我们如何检测Delayed_Job守护程序是否在脚本内部运行?(我们应该能够很容易地启动一个守护进程,但我不知道