从Heroku运行应用程序

时间:2015-10-23 20:47:17

标签: ruby-on-rails ruby ruby-on-rails-4 heroku

我已经构建了我的rails应用程序并将其推送到Heroku上线。问题是我无法创建或更新事件。在尝试更新或创建时,我收到的消息是“出了问题'。这是我的heroku日志中的错误:

2015-10-23T13:38:50.014461+00:00 app[web.1]:    (1.8ms)  BEGIN
2015-10-23T13:38:50.039168+00:00 app[web.1]:    (1.9ms)  ROLLBACK
2015-10-23T13:38:50.043567+00:00 app[web.1]: 
2015-10-23T13:38:50.043570+00:00 app[web.1]: TypeError (no implicit conversion of Array into String):
2015-10-23T13:38:50.043571+00:00 app[web.1]:   app/controllers/events_controller.rb:19:in `create'
2015-10-23T13:38:50.043572+00:00 app[web.1]: 
2015-10-23T13:38:50.043572+00:00 app[web.1]: 2015-10 23T13:38:50.030951+00:00 app[web.1]:   SQL (2.4ms)  INSERT INTO "events" ("name", "description", "picture", "datestart", "dateend", "timestart", "timeend", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"  [["name", "New Event w/Picture"], ["description", "adlkfjasdlkfjasjdkf\r\nadflkajsdfkajsdf\r\nadflkajdfa\r\ndfadf\r\nadfajsdfaf"], ["picture", "photo.jpg"], ["datestart", "2015-10-23"], ["dateend", "2015-10-23"], ["timestart", "2015-10-23 13:38:00.000000"], ["timeend", "2015-10-23 13:38:00.000000"], ["created_at", "2015-10-23 13:38:50.020179"], ["updated_at", "2015-10-23 13:38:50.020179"]]
2015-10-23T13:38:50.040280+00:00 app[web.1]: Completed 500 Internal Server Error in 696ms (ActiveRecord: 7.3ms)
WARNING: Toolbelt v3.42.20 update available.

当我对现有事件进行更新时,我收到同样的错误。但它引用了更新'动作。

以下是events_controller.rb文件中create动作的代码:

def create
  @event = Event.new(event_params)

  if @event.save
    flash[:success] = "Your event was created successfully!"
    redirect_to events_path
  else
    render :new
  end
end

  def event_params
    params.require(:event).permit(:name, :description, :datestart, :dateend, :timestart, :timeend, :cost, :picture)
  end

这是event.rb代码:

class Event < ActiveRecord::Base
  default_scope { order('datestart ASC') }
    belongs_to :user
    has_many :regs

    mount_uploader :picture, PictureUploader
    validate :picture_size

    private
      def picture_size
        if picture.size > 5.megabytes
          errors.add(:picture, "should be less that 5MB")
        end
      end
end

我可以在开发方面运行应用程序而没有任何问题(Cloud9)。

任何帮助都会有所帮助。

2 个答案:

答案 0 :(得分:1)

有趣...感谢发帖!

看起来问题不在于您的代码,在后端更多的东西(可能是数据库列设置或其他东西)。

<强>调试

我看到你修好了。

如果再次出现此类错误,您可以执行以下操作:

  1. 重新启动服务器(可能存在缓存问题或其他问题)。我相信您可以使用heroku restart -a app_name

  2. 执行此操作
  3. 检查您的数据库 - pgsqlmysql相似但略有不同。如果你要存储&#34;描述&#34;数据,您在创建架构时最好使用t.text

  4. 删除图片上传 - 如果您正在使用carrierwave,请注释掉mount_uploader :picture, PictureUploader&amp; validate :picture_size行 - 这会阻止图像处理,这可能是一个问题。

  5. 无论哪种方式,使用Heroku,都会出现一些小问题。

    虽然它是一个很棒的平台,但您必须记住,您需要一个生产数据库(并且它不会拥有与您的开发数据库相同的数据),以及必须使用&#34;热身&#34; (如果你在免费等级上)

答案 1 :(得分:0)

我不知道,但你试过吗?:

def create
  event_params[:description] = event_params[:description].to_s
  @event = Event.new(event_params)

  if @event.save
    flash[:success] = "Your event was created successfully!"
    redirect_to events_path
  else
    render :new
  end
end

我知道它很丑,但它只是为了测试。在我看来,你在开发中使用SQLite,在生产中使用PostgreSQL,这可能会导致这个问题。

description参数最初是一个数组?如果是这样,显式将其转换为String可能会起作用。如果您尝试将其从Array转换为String的其他参数,请尝试以这种方式进行操作,看看它是否有效。我不确定。