首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >rails 4 deep_clone在开发/分期和生产中的不同

rails 4 deep_clone在开发/分期和生产中的不同
EN

Stack Overflow用户
提问于 2020-06-25 13:14:00
回答 1查看 83关注 0票数 1

我正在运行一个rails 4应用程序。到目前为止,一切都很好,但是现在gem deep_clonable中的deep_clone发生了一个奇怪的错误。我制作了一个控制器方法来复制一个条目(交互模型/控制器)。

interactions_controller.rb:

代码语言:javascript
运行
复制
def duplicate
  @interaction = Interaction.find(params[:id]).deep_clone include: [ :interaction_solvents, :interaction_additives], skip_missing_associations: true
  @interaction.user = current_user

respond_to do |format|
    if @interaction.save
      format.html { redirect_to @interaction, notice: 'Item was successfully cloned.' }
    else
      format.html {  redirect_to Interaction.find(params[:id]), notice: 'ERROR: Item can\'t be cloned.'}
    end
  end
end

我使用docker进行开发,并使用capistrano将代码部署到暂存和生产服务器。中间服务器和生产服务器是相同的,我是在ENV=production中部署的。对于部署,我使用两个文件,它们仅在IP中不同,并且没有部署备份来进行暂存。

config/部署/production.rb:

代码语言:javascript
运行
复制
user = 'prod'

        before 'deploy:migrate', 'deploy:backup'
    
    server 'XXX.XX.146.242', user: user, roles: %w{app web db}
    puts %w(publickey)
    set :ssh_options, {
      forward_agent: true,
      auth_methods: %w(publickey)
    }
    #set :pty, false
    
    set :linked_files, fetch(:linked_files, []).push(
      '.ruby-version',
      '.ruby-gemset'
    )...

config/部署/staging.rb:

代码语言:javascript
运行
复制
    user = 'prod'
    
    #before 'deploy:migrate', 'deploy:backup'
    
    server 'XXX.XX.146.243', user: user, roles: %w{app web db}
    puts %w(publickey)
    set :ssh_options, {
      forward_agent: true,
      auth_methods: %w(publickey)
    }
    #set :pty, false
    
    set :linked_files, fetch(:linked_files, []).push(
      '.ruby-version',
      '.ruby-gemset'
    )
    
    #set :tmp_dir, "/home/#{user}/tmp"
    set :user, user

现在它来了。调用复制的所有东西在开发和分期方面都非常好。在制作过程中,复制工作翻了一番,并产生了两个新的副本。我更新了两个服务器并检查了版本。以下是一些规格:

Ubuntu 18.04.4 LTS (GNU/Linux4.15.0-36-通用4.2.10

  • postgres )

  • nginx版本: nginx/1.14.0 (Ubuntu)

  • Rails (PostgreSQL) 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)

)

部分生产日志:

代码语言:javascript
运行
复制
I, [2020-06-25T15:02:10.184115 #32495]  INFO -- : Started GET "/interactions/7336/duplicate" for 127.0.0.1 at 2020-06-25 15:02:10 +0200
I, [2020-06-25T15:02:10.186316 #32495]  INFO -- : Processing by InteractionsController#duplicate as HTML
I, [2020-06-25T15:02:10.186455 #32495]  INFO -- :   Parameters: {"id"=>"7336"}
...
I, [2020-06-25T15:02:11.514185 #32495]  INFO -- : Redirected to http://suprabank.org/interactions/7338
I, [2020-06-25T15:02:11.514595 #32495]  INFO -- : Completed 302 Found in 1328ms (ActiveRecord: 32.0ms)
I, [2020-06-25T15:02:11.590073 #32495]  INFO -- : Started GET "/interactions/7336/duplicate" for 127.0.0.1 at 2020-06-25 15:02:11 +0200
I, [2020-06-25T15:02:11.592145 #32495]  INFO -- : Processing by InteractionsController#duplicate as HTML
I, [2020-06-25T15:02:11.592555 #32495]  INFO -- :   Parameters: {"id"=>"7336"}
...
I, [2020-06-25T15:02:12.705493 #32495]  INFO -- : Redirected to http://suprabank.org/interactions/7339
I, [2020-06-25T15:02:12.705750 #32495]  INFO -- : Completed 302 Found in 1113ms (ActiveRecord: 23.1ms)
I, [2020-06-25T15:02:12.789812 #32495]  INFO -- : Started GET "/interactions/7339" for 127.0.0.1 at 2020-06-25 15:02:12 +0200
I, [2020-06-25T15:02:12.791400 #32495]  INFO -- : Processing by InteractionsController#show as HTML
I, [2020-06-25T15:02:12.791546 #32495]  INFO -- :   Parameters: {"id"=>"7339"}

从日志中看,第一次复制条目7336似乎很好,但是路由走错了方向,调用了另一个GET请求,即7336/重复。这是不应该发生的,在分期时也不会发生。在该小绕道服务器正确加载(第二)重复条目7339的显示操作之后。

我更新了两个服务器并重新启动了nginx,但是一直以来,相同的暂存服务器和生产服务器之间的操作不匹配吗?

知道是什么错误吗?

谢谢你,斯蒂芬恩

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 21:47:29

感谢莫里斯托,他创造了创业板deep_clonable!他帮助我的补偿(我创造了一个问题的GitHub回购联系他),宝石没有任何错误!

我把这个动作改为POST方法,而不是GET。

routes.rb:

代码语言:javascript
运行
复制
post 'interactions/:id/duplicate', to: 'interactions#duplicate'

index.html.rb:

代码语言:javascript
运行
复制
<%= link_to "", {controller: "interactions", action: 'duplicate', id: interaction.id}, class:'fa fa-clone', :method=>:post%>

在生产服务器上成功了。

谢谢你的帮助,特别是对摩瑞斯托的帮助。你好,斯蒂芬恩

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62576235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档