2

我在生产中收到一个错误,仅显示:

TypeError (no implicit conversion of Symbol into String):
app/controllers/products_controller.rb:15:in `create'

这是 products_controller.rb 文件中的相关代码(注意有问题的行是下面的第 2 行)

def create
  @product = @category.products.build(product_params)
  if @product.save
    flash[:success] = "Product successfully created"
    redirect_to [@category, @product]
  else
    flash[:alert] = "Product not created"
    render 'new'
  end
end

private

  def product_params
    params.require(:product).permit(:name, :description, :url, :category_id, :picture, :price, :social_image)
  end

此代码目前在开发和测试环境中运行良好,并且之前在生产环境中运行(将在下面解释自上次工作生产版本以来的更改)。我使用了一个差异工具来确认 Gemfile.lock 在本地机器和生产机器之间是相同的,以消除这方面的问题。

注意:我之前使用 Paperclip gem 进行文件上传,如 :picture 参数中所示,但是我最近为这个模型添加了第二个文件上传 (:social_image),并且还通过 aws-sdk gem 将上传方法切换到 Amazon S3而不仅仅是生产服务器。另外,我已经确认 development.rb 和 production.rb 之间的所有相关设置都是正确的。

请求的参数可以在下面找到:

{"utf8"=>"✓",
 "authenticity_token"=>"yJJ1HwLZz9oDmsfUfN87DATCe+HC9IBhYVBddRvm4=",
 "product"=>{"name"=>"Heineken Style USB Flash Drive",
 "description"=>"Sample Description.",
 "url"=>"http://www.amazon.com/",
 "category_id"=>"1",
 "price"=>"7.99",
 "picture"=>#<ActionDispatch::Http::UploadedFile:0x00000004986260 @tempfile=#<Tempfile:/tmp/RackMultipart20131013-3068-fyjvy2>,
 @original_filename="heineken-usb-drive-stock.jpg",
 @content_type="image/jpeg",
 @headers="Content-Disposition: form-data; name=\"product[picture]\"; filename=\"heineken-usb-drive-stock.jpg\"\r\nContent-Type: image/jpeg\r\n">,
 "social_image"=>#<ActionDispatch::Http::UploadedFile:0x000000049861c0 @tempfile=#<Tempfile:/tmp/RackMultipart20131013-3068-1glzf9p>,
 @original_filename="heineken-usb-drive.png",
 @content_type="image/png",
 @headers="Content-Disposition: form-data; name=\"product[social_image]\"; filename=\"heineken-usb-drive.png\"\r\nContent-Type: image/png\r\n">},
 "commit"=>"Create Product",
 "category_id"=>"geeky"} 

我在下面也包含了一个堆栈跟踪,供大家参考:

paperclip (3.5.1) lib/paperclip/storage/s3.rb:141:in `gsub'
paperclip (3.5.1) lib/paperclip/storage/s3.rb:141:in `block in extended'
paperclip (3.5.1) lib/paperclip/storage/s3.rb:117:in `instance_eval'
paperclip (3.5.1) lib/paperclip/storage/s3.rb:117:in `extended'
paperclip (3.5.1) lib/paperclip/attachment.rb:390:in `extend'
paperclip (3.5.1) lib/paperclip/attachment.rb:390:in `initialize_storage'
paperclip (3.5.1) lib/paperclip/attachment.rb:85:in `initialize'
paperclip (3.5.1) lib/paperclip/has_attached_file.rb:46:in `new'
paperclip (3.5.1) lib/paperclip/has_attached_file.rb:46:in `block in define_instance_getter'
paperclip (3.5.1) lib/paperclip/has_attached_file.rb:65:in `block in define_setter'
activerecord (4.0.0) lib/active_record/attribute_assignment.rb:42:in `public_send'
activerecord (4.0.0) lib/active_record/attribute_assignment.rb:42:in `_assign_attribute'
activerecord (4.0.0) lib/active_record/attribute_assignment.rb:29:in `block in assign_attributes'
activerecord (4.0.0) lib/active_record/attribute_assignment.rb:23:in `each'
activerecord (4.0.0) lib/active_record/attribute_assignment.rb:23:in `assign_attributes'
activerecord (4.0.0) lib/active_record/core.rb:192:in `initialize'
activerecord (4.0.0) lib/active_record/inheritance.rb:27:in `new'
activerecord (4.0.0) lib/active_record/inheritance.rb:27:in `new'
activerecord (4.0.0) lib/active_record/reflection.rb:189:in `build_association'
activerecord (4.0.0) lib/active_record/associations/association.rb:242:in `build_record'
activerecord (4.0.0) lib/active_record/associations/collection_association.rb:114:in `build'
activerecord (4.0.0) lib/active_record/associations/collection_proxy.rb:229:in `build'
app/controllers/products_controller.rb:16:in `create'
actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (4.0.0) lib/active_support/callbacks.rb:443:in `_run__3726568038748606890__process_action__callbacks'
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument'
activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument'
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (4.0.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.0.0) lib/abstract_controller/base.rb:136:in `process'
actionpack (4.0.0) lib/abstract_controller/rendering.rb:44:in `process'
actionpack (4.0.0) lib/action_controller/metal.rb:195:in `dispatch'
actionpack (4.0.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.0.0) lib/action_controller/metal.rb:231:in `block in action'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `call'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:48:in `call'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:71:in `block in call'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `each'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in `call'
warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
warden (1.2.3) lib/warden/manager.rb:34:in `catch'
warden (1.2.3) lib/warden/manager.rb:34:in `call'
rack (1.5.2) lib/rack/etag.rb:23:in `call'
rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
rack (1.5.2) lib/rack/head.rb:11:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call'
activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__1565355437262191815__call__callbacks'
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
railties (4.0.0) lib/rails/engine.rb:511:in `call'
railties (4.0.0) lib/rails/application.rb:97:in `call'
/home/application/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.16/lib/phusion_passenger/rack/thread_handler_extension.rb:77:in `process_request'
/home/application/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.16/lib/phusion_passenger/request_handler/thread_handler.rb:140:in `accept_and_process_next_request'
/home/application/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.16/lib/phusion_passenger/request_handler/thread_handler.rb:108:in `main_loop'
/home/application/.rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.16/lib/phusion_passenger/request_handler.rb:441:in `block (3 levels) in start_threads'

最后,完整的代码库可在以下位置获得:https ://github.com/mhoad/there-goes-my-paycheck/tree/deployment如果有人想查看任何其他文件。

任何帮助将不胜感激!提前致谢

4

1 回答 1

6

在您的 production.rb 文件中,回形针配置为:url => :s3_domain_url,而在 dev中配置为:url => ':s3_domain_url'(注意引号)。似乎您也可以将整个 config.paperclip_defaults 移动到 application.rb,因此即使发生更改,也可以保证相同的设置。

顺便说一句,感谢您发布指向 repo 的链接 - 当您可以看到整个应用程序时,更容易发现这些东西。

于 2013-10-13T05:20:24.800 回答