首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两台具有完全相同的代码和配置的机器上设计不同的工作。

问在两台具有完全相同的代码和配置的机器上设计不同的工作。
EN

Stack Overflow用户
提问于 2019-12-29 18:55:12
回答 1查看 244关注 0票数 0

我正在使用Ruby2.6.5和Rails 5.2.2。

我对设计的行为很困惑。首先,我让我的项目在我的本地主机工作。当我试图将项目放到VPS中时,错误就开始了。

在两台不同的机器( VPS和machines )中,具有相同gem版本和相同操作系统的相同代码的工作方式不同。

退伍军人计划:

代码语言:javascript
复制
    devise (4.7.1)
      bcrypt (~> 3.0)
      orm_adapter (~> 0.1)
      railties (>= 4.1.0)
      responders
      warden (~> 1.2.3)
    devise-i18n (1.8.2)
      devise (>= 4.6)

输入/用户/登录:

​

​

登录后:

​

​

当地的主人:

代码语言:javascript
复制
    devise (4.7.1)
      bcrypt (~> 3.0)
      orm_adapter (~> 0.1)
      railties (>= 4.1.0)
      responders
      warden (~> 1.2.3)
    devise-i18n (1.8.2)
      devise (>= 4.6)

输入/用户/登录:

​

​

登录后:

​

​

守则:

代码语言:javascript
复制
class Admin::HomeController < ApplicationController
  layout 'admin'

  before_action :authenticate_user!
  before_action :set_title

  def index
  end

  private

    def set_title
      @title = 'Home'
    end
end
代码语言:javascript
复制
class Admin::User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable,
         :recoverable, :rememberable, :validatable
end
代码语言:javascript
复制
# frozen_string_literal: true

class Admin::User::SessionsController < ::Devise::SessionsController
  layout 'login'

  # before_action :configure_sign_in_params, only: [:create]

  # GET /resource/sign_in
  # def new
  #   super
  # end

  # POST /resource/sign_in
  # def create
  #   super
  # end

  # DELETE /resource/sign_out
  # def destroy
  #   super
  # end

  # protected

  # If you have extra params to permit, append them to the sanitizer.
  # def configure_sign_in_params
  #   devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
  # end
end
代码语言:javascript
复制
Rails.application.routes.draw do
  devise_for :clients, controllers: {
    sessions: 'clients/sessions',
    confirmations: 'clients/confirmations',
    omniauth: 'clients/omniauth',
    registrations: 'clients/registrations',
    passwords: 'clients/passwords',
    unlocks: 'clients/unlocks'
  }

  #
  # Área do cliente
  #
  devise_scope :client do
    get 'area-do-cliente/entrar', to: 'clients/sessions#new'
    get 'area-do-cliente/meus-dados', to: 'clients/registrations#edit'
  end

  get 'area-do-cliente/pedidos', to: 'clients/orders#index', as: 'client_orders'

  devise_for :users,
             class_name: "Admin::User",
             controllers: {
    sessions: 'admin/user/sessions',
    confirmations: 'admin/user/confirmations',
    omniauth: 'admin/user/omniauth',
    registrations: 'admin/user/registrations',
    passwords: 'admin/user/passwords',
    unlocks: 'admin/user/unlocks'
  }

  namespace :admin do
    root 'home#index'

# Some other routes ...

我解决了VPS的真实性问题。现在它不会抛出错误,但是当我登录时,它重定向到错误的路径(而不是管理根),并使用current_user nil。

关于设计的真实性问题有很多问题,他们说要把这一点放在控制器中:

代码语言:javascript
复制
protect_from_forgery

我做到了,但是现在在登录current_user之后是nil。

这两个环境之间有一点不同,那就是在VPS中,我用这个配置拥有Nginx:

代码语言:javascript
复制
server {
    listen 80;
    listen [::]:80;

    server_name vps12441.publiccloud.com.br;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

为什么设计器在两台不同的机器上获得完全相同的代码(和应用程序配置)的不同行为?

我怎么才能让它起作用?

EN

回答 1

Stack Overflow用户

发布于 2019-12-29 22:29:41

听起来你在轨道6上吗?Rails 6在默认情况下试图在生产模式中验证一个真实性令牌。我猜想,在VPS上,您的应用程序正在以生产模式运行,并试图保护您免受CSRF攻击,而在开发模式下,CSRF攻击不是这样做的,这就是它在本地主机上运行的方式。您可以确认我是否正确,但如果我将skip_before_action :verify_authenticity_token添加到您的ApplicationController中,则会使VPS解决方案中的问题消失。

在VPS上进行开发的另一个选择是在开发模式下启动Rails服务器:RAILS_ENV=development bundle exec rails s。

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

https://stackoverflow.com/questions/59522366

复制
相关文章

相似问题

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