rails controller action包含一个算法

时间:2017-09-04 10:15:22

标签: ruby-on-rails

我做了一个rails应用程序。用户可以上传图片。将图像保存到数据库中。调用一种算法来处理这些图片。 现在,它是在这样的控制器动作中实现的:

def create
  @post = current_user.posts.build(params)
  if @post.save
    flash[:success]="post created"
    redirect_to root_url
    image_names = []
    @post.picture.each do |imgs|
      image_names << imgs.url
    end
    my_algorithm(image_names)
  else
    render 'static_pages/home'
  end
end

它正常工作。问题是页面在算法完成之前没有显示。算法花了很长时间。如何解决它。或者可以在其他地方调用my_algorithm?还是delay_job?

3 个答案:

答案 0 :(得分:1)

我认为您应该使用Active Job,因为这将使您的工作成为后台工作

答案 1 :(得分:0)

首先,这应该在回调中完成,这里是strawberry/c/bin/../lib/gcc/i686-w64-mingw32/4.7.3/. /i686-w64-mingw32/bin/ld.exe: cannot find -lcrypto-1_1 and -lssl-1_1 模型的INCDIRS := -I/$(inc) # LIBS: Include new Library LIBS = lib/-lssl-1_1 lib/-lcrypto-1_1 # Generate a list of .cpp files, which is stored # in the SRCDIR directory. SRCFILES := $(wildcard $(SRCDIR)/*.cpp) # Patsubst function generate a list of .o files. OBJFILES := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCFILES)) # Generate a list of .d (dependency) files, that is # produced by the compiler. Stored in the OBJDIR directory. #DEPFILES := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.d,$(SRCFILES)) # Start $(BINDIR)/$(PROGRAM): $(OBJFILES) $(LINKER) $(CFLAGS) $(INCDIRS) -o $@ $^ $(LIBS) # Bbuild a .o file in the OBJDIR directory from a .cpp file # in the SRCDIR directory. $(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(CXX) $(CFLAGS) $(INCDIRS) -c $< -o $@ $(LIBS) 回调。从after_create您可以排队一个Post或其他后台作业,它将触发算法。在前端,您可以在要显示已处理信息的位置显示一些消息,例如处理不足。

由于

答案 2 :(得分:0)

您应该尝试后台作业在特定时间执行该操作。 您可以使用 sidekiq gem 来触发后台事件。

或者您可以将以下网址引用至,执行活动作业

http://edgeguides.rubyonrails.org/active_job_basics.html#enqueue-the-job

参考上面的网址并配置应用并在后台执行操作。 我还提到了另外一个关于预定工作的链接,

How to perform a background job now?