我做了一个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?
答案 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
参考上面的网址并配置应用并在后台执行操作。 我还提到了另外一个关于预定工作的链接,