0

我在将新添加的列中的信息写入我的 mysql 数据库时遇到问题。特别是“site_email”。当我在本地运行项目时,我可以使用我的新列内容写入数据库,它会出现在随后的显示页面上。

但是在开发服务器上我不能。开发服务器日志显示请求中发送的内容。

Started PUT "/sites/18" for x.x.139.147 at 2012-12-03 19:47:39 +0000
      Processing by SitesController#update as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"6QXzdALrXqXoQz+Q5SFXd+egNQGxOAdNIC8ZH9A9yqU=", "site"=>{"customer_id"=>"1", "site_name"=>"Demohello", "site_domain"=>"Demo", "site_email"=>"test@email.comhello", "google_analytics_code"=>"", "visible"=>"1", "mobile_visible"=>"1", "logo_cache"=>"", "background_logo_cache"=>"", "header_cache"=>"", "background_cache"=>"", "campaign_wrapbar_cache"=>""}, "commit"=>"Update Site", "id"=>"18"}
    Redirected to http://x.com/sites/18
    Completed 302 Found in 17ms

但是当它进入显示页面时,新的/更新的电子邮件数据不存在。奇怪的是,如果我将任何数据添加到预先存在的列以及其他数据已成功发送到数据库但电子邮件不是。

索引显示和编辑页面都显示没有错误,如果我手动更改数据库中的信息,它会显示在显示页面上。在发送请求数据并且页面没有产生错误时,我什至无法调试它。

从 /var/www/sitename/current 我跑

bundle exec rake db:migrate

使用 SequelPro 连接到开发数据库我可以看到该列看起来在那里,并且实际上如果我在 site_email 列中插入一个值,数据就会出现在显示页面上。

D B

http://i.imgur.com/QwAfC.png

显示插入值的页面

http://i.imgur.com/Sn7ws.png

_form.html.erb

<%= form_for(@site) do |f| %>
  <% if @site.errors.any? %>
  <div id="error_explanation">
    <h2><%= pluralize(@site.errors.count, "error") %> prohibited this site from being saved:</h2>

    <ul>
      <% @site.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
      <% end %>
    </ul>
  </div>
  <% end %>

  <div class="field">
    <%= f.label :customer_id %><br />
    <%#= f.text_field :customer %>
    <%= f.collection_select(:customer_id, Customer.all , :id , :customer_name ) %>

  </div>
  <div class="field">
    <%= f.label :site_name %><br />
    <%= f.text_field :site_name %>
  </div>
  <div class="field">
    <%= f.label :site_domain %><br />
    <%= f.text_field :site_domain %>
  </div>
    <div class="field">
    <%= f.label :site_email %><br />
    <%= f.text_field :site_email %>
  </div>
  <div class="field">
    <%= f.label :google_analytics_code %><br />
    <%= f.text_field :google_analytics_code %>
  </div>
  <div class="field">
   <%= f.label :visible %><br />
   <%= f.check_box :visible %><br />
  </div>
  <div class="field">
    <%= f.label :mobile_visible %><br />
    <%= f.check_box :mobile_visible %><br />
  </div>
  <div class="field">
    <%= f.label :logo %>
    <%= f.file_field :logo %>
    <%= f.hidden_field :logo_cache %><br />
    <%= image_tag(@site.logo_url) if @site.logo? %>
  </div>
  <div class="field">
    <%= f.label :background_logo %>
    <%= f.file_field :background_logo %>
    <%= f.hidden_field :background_logo_cache %><br />
    <%= image_tag(@site.background_logo_url) if @site.background_logo? %>
  </div>
  <div class="field">
    <%= f.label :header %>
    <%= f.file_field :header %>
    <%= f.hidden_field :header_cache %><br />
    <%= image_tag(@site.header_url) if @site.header? %>
  </div>
  <div class="field">
    <%= f.label :background %>
    <%= f.file_field :background %>
    <%= f.hidden_field :background_cache %><br />
    <%= image_tag(@site.background_url) if @site.background? %>
  </div>
  <div class="field">
    <%= f.label :campaign_wrapbar %>
    <%= f.file_field :campaign_wrapbar %>
    <%= f.hidden_field :campaign_wrapbar_cache %><br />
    <%= image_tag(@site.campaign_wrapbar_url) if @site.campaign_wrapbar? %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

显示.html.erb

<section id="otherpage">
  <div class="otherpagetitle"> <%= @site.site_name %></div>
  <div class="otherpagetext dark_border_24_no_pad">

    <p>
      <b>Site name:</b>
      <%= @site.site_name %>
    </p>

    <p>
      <b>Site customer:</b>
      <%= @site.customer %>
    </p>

    <p>
      <b>Site domain:</b>
      <%= @site.site_domain %>
    </p>

    <p>
      <b>Site email:</b>
      <%= @site.site_email %>
    </p>

    <p>
      <b>Google analytics code:</b>
      <%= @site.google_analytics_code %>
    </p>

    <div class="field">
      <p>
        <b>Visible: </b>
        <%= check_box_tag "Visible", "yes", @site.visible, disabled: true %>
      </p>
    </div>
    <div class="field">
      <p>
        <b>Mobile Visible: </b>
        <%= check_box_tag "Mobile Visible", "yes", @site.mobile_visible, disabled: true %>
      </p>
    </div>
    <div class="field">
      <p>
        <b>Logo: </b><br />
        <%= @site.logo? ? image_tag(@site.logo_url) : "No logo uploaded" %>
      </p>
    </div>
    <div class="field">
      <p>
        <b>Background Logo: </b><br />
        <%= @site.background_logo? ? image_tag(@site.background_logo_url) : "No background logo uploaded" %>
      </p>
    </div>
    <%= link_to 'Edit', edit_site_path(@site) %> |
    <%= link_to 'Back', sites_path %>
  </div>
</section>

编辑.html.erb

<section id="otherpage">

      <div class="otherpagetitle">Editing Site</div>
      <div class="otherpagetext dark_border_24_no_pad">


        <%= render 'form' %>

        <%= link_to 'Show', @site %> |
        <%= link_to 'Back', sites_path %>
      </div>
    </section>

站点控制器.rb

class SitesController < ApplicationController
  load_and_authorize_resource


  # GET /sites
  # GET /sites.json
  def index
    @sites = Site.all
    @site = Site.first(conditions: { site_domain: request.subdomain }) || not_found

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @sites }
    end
  end

  # GET /sites/1
  # GET /sites/1.json
  def show
    @site = Site.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @site }
    end
  end

  # GET /sites/new
  # GET /sites/new.json
  def new
    @site = Site.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @site }
    end
  end

  # GET /sites/1/edit
  def edit
    @site = Site.find(params[:id])
  end

  # POST /sites
  # POST /sites.json
  def create
    @site = Site.new(params[:site])

    respond_to do |format|
      if @site.save
        format.html { redirect_to @site, notice: 'Site was successfully created.' }
        format.json { render json: @site, status: :created, location: @site }
      else
        format.html { render action: "new" }
        format.json { render json: @site.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /sites/1
  # PUT /sites/1.json
  def update
    @site = Site.find(params[:id])

    respond_to do |format|
      if @site.update_attributes(params[:site])
        format.html { redirect_to @site, notice: 'Site was successfully updated.' }
        format.json { head :ok }
      else
        format.html { render action: "edit" }
        format.json { render json: @site.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /sites/1
  # DELETE /sites/1.json
  def destroy
    @site = Site.find(params[:id])
    @site.destroy

    respond_to do |format|
      format.html { redirect_to sites_url }
      format.json { head :ok }
    end
  end

  def site_styles
    @site = Site.first(conditions: { site_domain: request.subdomain }) || not_found

    respond_to do |format|
      format.html
      format.json { render json: @site }
      format.css
    end
  end
end

Gemlock.文件

GEM
  remote: http://rubygems.org/
  specs:
    actionmailer (3.1.5)
      actionpack (= 3.1.5)
      mail (~> 2.3.3)
    actionpack (3.1.5)
      activemodel (= 3.1.5)
      activesupport (= 3.1.5)
      builder (~> 3.0.0)
      erubis (~> 2.7.0)
      i18n (~> 0.6)
      rack (~> 1.3.6)
      rack-cache (~> 1.2)
      rack-mount (~> 0.8.2)
      rack-test (~> 0.6.1)
      sprockets (~> 2.0.4)
    activemodel (3.1.5)
      activesupport (= 3.1.5)
      builder (~> 3.0.0)
      i18n (~> 0.6)
    activerecord (3.1.5)
      activemodel (= 3.1.5)
      activesupport (= 3.1.5)
      arel (~> 2.2.3)
      tzinfo (~> 0.3.29)
    activeresource (3.1.5)
      activemodel (= 3.1.5)
      activesupport (= 3.1.5)
    activesupport (3.1.5)
      multi_json (>= 1.0, < 1.3)
    ansi (1.4.2)
    arel (2.2.3)
    bcrypt-ruby (3.0.1)
    best_in_place (1.0.6)
      jquery-rails
      rails (~> 3.1)
    builder (3.0.0)
    cancan (1.6.7)
    capistrano (2.11.2)
      highline
      net-scp (>= 1.0.0)
      net-sftp (>= 2.0.0)
      net-ssh (>= 2.0.14)
      net-ssh-gateway (>= 1.1.0)
    capistrano-ext (1.2.1)
      capistrano (>= 1.0.0)
    carrierwave (0.5.8)
      activesupport (~> 3.0)
    ckeditor (3.7.0.rc2)
      mime-types (~> 1.17.2)
      orm_adapter (~> 0.0.6)
    coffee-rails (3.1.1)
      coffee-script (>= 2.2.0)
      railties (~> 3.1.0)
    coffee-script (2.2.0)
      coffee-script-source
      execjs
    coffee-script-source (1.2.0)
    daemons (1.1.8)
    devise (1.5.3)
      bcrypt-ruby (~> 3.0)
      orm_adapter (~> 0.0.3)
      warden (~> 1.1)
    erubis (2.7.0)
    eventmachine (0.12.10)
    execjs (1.2.13)
      multi_json (~> 1.0)
    friendly_id (4.0.1)
    has_scope (0.5.1)
    highline (1.6.11)
    hike (1.2.1)
    i18n (0.6.0)
    inherited_resources (1.2.2)
      has_scope (~> 0.5.0)
      responders (~> 0.6.0)
    jquery-rails (1.0.19)
      railties (~> 3.0)
      thor (~> 0.14)
    json (1.7.3)
    mail (2.3.3)
      i18n (>= 0.4.0)
      mime-types (~> 1.16)
      treetop (~> 1.4.8)
    mime-types (1.17.2)
    mini_magick (3.4)
      subexec (~> 0.2.1)
    minitest (2.6.1)
    multi_json (1.2.0)
    mysql2 (0.3.11)
    net-scp (1.0.4)
      net-ssh (>= 1.99.1)
    net-sftp (2.0.5)
      net-ssh (>= 2.0.9)
    net-ssh (2.3.0)
    net-ssh-gateway (1.1.0)
      net-ssh (>= 1.99.1)
    orm_adapter (0.0.6)
    polyglot (0.3.3)
    rack (1.3.6)
    rack-cache (1.2)
      rack (>= 0.4)
    rack-mount (0.8.3)
      rack (>= 1.0.0)
    rack-ssl (1.3.2)
      rack
    rack-test (0.6.1)
      rack (>= 1.0)
    rails (3.1.5)
      actionmailer (= 3.1.5)
      actionpack (= 3.1.5)
      activerecord (= 3.1.5)
      activeresource (= 3.1.5)
      activesupport (= 3.1.5)
      bundler (~> 1.0)
      railties (= 3.1.5)
    rails-i18n (0.3.0)
      i18n (~> 0.5)
    railties (3.1.5)
      actionpack (= 3.1.5)
      activesupport (= 3.1.5)
      rack-ssl (~> 1.3.2)
      rake (>= 0.8.7)
      rdoc (~> 3.4)
      thor (~> 0.14.6)
    rake (0.9.2.2)
    rdoc (3.12)
      json (~> 1.4)
    responders (0.6.5)
    sass (3.1.15)
    sass-rails (3.1.4)
      actionpack (~> 3.1.0)
      railties (~> 3.1.0)
      sass (>= 3.1.4)
      sprockets (~> 2.0.0)
      tilt (~> 1.3.2)
    sprockets (2.0.4)
      hike (~> 1.2)
      rack (~> 1.0)
      tilt (~> 1.1, != 1.3.0)
    sqlite3 (1.3.5)
    subexec (0.2.1)
    thin (1.3.1)
      daemons (>= 1.0.9)
      eventmachine (>= 0.12.6)
      rack (>= 1.0.0)
    thor (0.14.6)
    tilt (1.3.3)
    treetop (1.4.10)
      polyglot
      polyglot (>= 0.3.1)
    truncate_html (0.5.4)
    turn (0.8.3)
      ansi
    tzinfo (0.3.33)
    uglifier (1.2.3)
      execjs (>= 0.3.0)
      multi_json (>= 1.0.2)
    warden (1.1.0)
      rack (>= 1.0)
    will_paginate (3.0.3)

PLATFORMS
  ruby

DEPENDENCIES
  best_in_place
  cancan
  capistrano-ext
  carrierwave
  ckeditor (= 3.7.0.rc2)
  coffee-rails (~> 3.1.1)
  devise (~> 1.5)
  execjs (~> 1.2.11)
  friendly_id
  inherited_resources
  jquery-rails
  mini_magick
  minitest
  mysql2 (~> 0.3.11)
  rails (~> 3.1.4)
  rails-i18n
  sass-rails (= 3.1.4)
  sqlite3
  thin
  truncate_html
  turn
  uglifier (>= 1.0.3)
  will_paginate (~> 3.0)

移民

class AddSiteEmailColumnToSites < ActiveRecord::Migration
      def change
        add_column :sites, :site_email, :string
      end
    end

capistrano 部署

cap staging deploy
    triggering load callbacks
  * 2012-12-03 20:45:57 executing `staging'
    triggering start callbacks for `deploy'
  * 2012-12-03 20:45:57 executing `multistage:ensure'
Identity added: /Users/me/.ssh/id_rsa (/Users/me/.ssh/id_rsa)
  * 2012-12-03 20:45:57 executing `deploy'
  * 2012-12-03 20:45:57 executing `deploy:update'
 ** transaction: start
  * 2012-12-03 20:45:57 executing `deploy:update_code'
    executing locally: "git ls-remote ssh://gitolite@site_repo:2011/proto_mysitename_rails HEAD"
    command finished in 2997ms
  * executing "git clone -q ssh://gitolite@site_repo:2011/proto_mysitename_rails /var/www/sitename/releases/20121203204600 && cd /var/www/sitename/releases/20121203204600 && git checkout -q -b deploy ed9ca3a2f10b049ed17b952d90ec7b61e9e98822 && (echo ed9ca3a2f10b049ed17b952d90ec7b61e9e98822 > /var/www/sitename/releases/20121203204600/REVISION)"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 80618ms
  * 2012-12-03 20:47:21 executing `deploy:finalize_update'
    triggering before callbacks for `deploy:finalize_update'
  * 2012-12-03 20:47:21 executing `deploy:assets:symlink'
  * executing "rm -rf /var/www/sitename/releases/20121203204600/public/assets &&\\\n        mkdir -p /var/www/sitename/releases/20121203204600/public &&\\\n        mkdir -p /var/www/sitename/shared/assets &&\\\n        ln -s /var/www/sitename/shared/assets /var/www/sitename/releases/20121203204600/public/assets"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 118ms
  * executing "chmod -R -- g+w /var/www/sitename/releases/20121203204600 && rm -rf -- /var/www/sitename/releases/20121203204600/public/system && mkdir -p -- /var/www/sitename/releases/20121203204600/public/ && ln -s -- /var/www/sitename/shared/system /var/www/sitename/releases/20121203204600/public/system && rm -rf -- /var/www/sitename/releases/20121203204600/log && ln -s -- /var/www/sitename/shared/log /var/www/sitename/releases/20121203204600/log && rm -rf -- /var/www/sitename/releases/20121203204600/tmp/pids && mkdir -p -- /var/www/sitename/releases/20121203204600/tmp/ && ln -s -- /var/www/sitename/shared/pids /var/www/sitename/releases/20121203204600/tmp/pids"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 120ms
    triggering after callbacks for `deploy:update_code'
  * 2012-12-03 20:47:21 executing `deploy:assets:precompile'
  * executing "cd /var/www/sitename/releases/20121203204600 && rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
 ** [out :: x.x.x.x] /usr/local/bin/ruby /usr/local/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets
    command finished in 101748ms
  * 2012-12-03 20:49:03 executing `deploy:create_symlink'
  * executing "rm -f /var/www/sitename/current && ln -s /var/www/sitename/releases/20121203204600 /var/www/sitename/current"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 111ms
 ** transaction: commit
  * 2012-12-03 20:49:03 executing `deploy:restart'
  * executing "rm /var/www/sitename/current/config/database.yml"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 65ms
  * executing "ln -s /var/www/sitename/shared/database.yml /var/www/sitename/current/config/database.yml"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 65ms
  * executing "ln -s /var/www/sitename/shared/session_store.rb /var/www/sitename/current/config/initializers/session_store.rb"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 69ms
  * executing "ln -s /var/www/sitename/shared/public/uploads /var/www/sitename/current/public/uploads"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 63ms
  * executing "ln -s /var/www/sitename/shared/public/ckeditor_assets /var/www/sitename/current/public/ckeditor_assets"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command
    command finished in 62ms
  * executing "sudo -p 'sudo password: ' touch /var/www/sitename/current/tmp/restart.txt"
    servers: ["x.x.x.x"]
    [x.x.x.x] executing command

非常欢迎有关此问题的任何帮助或建议。

谢谢

更新

在不改变任何东西的情况下,值现在写入数据库。24岁左右。我现在对实时服务器有同样的问题。我又等了 24 小时,看看这是否解决了问题,或者我是否不小心以其他方式修复了它。

以防万一其他人将来遇到这个问题,有没有人知道它为什么会这样?

更新 2

实时服务器现在也在更新这些值。似乎服务器可能负载过重,或者数据库正在以某种方式运行。

参考

作为参考,如果您尝试尝试评论中的所有建议并查看 Thomas 的回答,这应该可以解决 99.9% 的问题。如果它在本地工作但不在服务器上,并且您已经尝试了所有这些步骤,那么它很可能与我遇到的问题相同,不幸的是我目前对此没有真正的答案。

4

1 回答 1

2

这可能是某种批量分配问题,如果没有列出属性,除非进行了某些设置,否则它们会被静默删除。

尝试在您的站点模型中添加:site_email您的呼叫。attr_accessible

# app/models/site.rb
...
attr_accessible :name, :site_email # mass-assignment protection

您需要在那里列出您希望能够@site.update_attributes(params[:site]在控制器中更新的所有属性,并使用所谓的质量分配实例化Site.new(name: ..., site_email: ...)or Site.create(name: ..., site_email: ...)

于 2012-12-03T21:19:26.153 回答