小编Bo *_*nes的帖子

如果浮点组件不是.00 sprintf/printf,则仅显示小数点

我非常格式化浮点数,但如果没有相关的浮点数,则希望它显示为整数.

  • 1.20 - > 1.2x
  • 1.78 - > 1.78x
  • 0.80 - > 0.8x
  • 2.00 - > 2x

我可以通过一些正则表达式实现这一点,但想知道是否有sprintf这样做的唯一方法?

我喜欢懒洋洋地在红宝石中这样做:

("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
Run Code Online (Sandbox Code Playgroud)

ruby floating-point printf

39
推荐指数
4
解决办法
2万
查看次数

使用Rails和ActiveMerchant重复计费:最佳做法,陷阱,陷阱?

我们正准备发布过去一年一直在开发的大型Web应用程序.我们即将开始整合ActiveMerchant以处理服务的定期订阅费用.

我正在寻找关于考虑到我们的要求(下面列出的)的最佳实践的任何建议,以及针对我应该特别考虑的常见陷阱或特定问题的任何额外提示.我们将使用的支付网关是PaymentExpress,因为它是支持定期计费的少数支持网关之一,对于在美国境外运营的公司没有任何特殊条件.该应用程序背后的业务基于英国.

该应用程序的用户创建一个具有子域的帐户,他们可以访问和自定义应用程序及其数据.以下是可能影响结算方式的一些要求/功能:

  • 所有用户都可以获得30天的试用期
  • 有不同的计划,包括免费的计划
  • 价格较高的计划对其帐户中可能拥有的数据量(例如用户,项目等)有较大限制
  • 计费期限为每月一次
  • 将有折扣/优惠券代码,以获得计划等一年正常价格的百分比.
  • 计划定价将随着功能的添加而变化

我可以预见的具体障碍包括以下内容:

  • 如何在违反较低级别计划的计划限制时处理降级.
  • 信用卡到期或付款未通过时的行为(可能是强制执行的只读模式)
  • 当计划定价发生变化时,我们希望在一段时间内(例如6个月)兑现现有用户的先前价格,然后开始收取更高的费率.如果计划价格下降,它将立即生效.

其他有用的建议是关于应用程序流程的任何建议.如何向用户呈现结算表单?何时需要信用卡信息?如何发送,存储和访问发票?

我应该透露,我们计划将大量代码库基于SaaSy.SaaSy旨在用作单独的Rails应用程序,处理所有注册和帐户管理方面的事情.然而,这对我们不起作用,因为我们从一开始就没有计划过这个,而且让我们的应用程序适应这样的工作将是一个繁琐的过程.因此,我们将从SaaSy中提取代码和想法并将它们合并到我们的应用程序中,这是一项相当不繁琐的任务.

ruby payment web-applications ruby-on-rails recurring-billing

32
推荐指数
2
解决办法
9219
查看次数

什么是记录匿名用户投票的可靠方法,不允许重复

首先,我尽可能地搜索并阅读所有似乎相关的SO问题,但没有具体回答这个问题.这不是重复的,不是重复的.

显然,如果允许在网站上进行匿名投票,则没有万无一失的方法可以阻止某人多次投票.

但是,我想知道有经验的人是否可以帮助我提出一个相当可靠的方法来跟踪绝对独特的访问者并记录对这些凭据的投票.

目前我确保每个项目/会话组合只允许一个投票,但是通过重新启动浏览器,更改浏览器/计算机或清除会话数据可以轻松避免这种情况.

记录IP似乎是下一个合理的解决方案,但我想知道这是否会经常出现误报(NAT后面的同一局域网中的多个人将拥有相同的外部IP等).

这里有中间地带或我忽略的其他方法/组合吗?

session web-applications

32
推荐指数
3
解决办法
2439
查看次数

Apache2反向代理到需要BasicAuth但想要从用户隐藏它的端点

基本上我的情况是我有一个内部网站,需要一个单一的硬编码用户名和密码才能访问(这不能关闭,只能更改).我出于各种原因通过反向代理公开这个网站(隐藏端口,简化网址,简化NAT等).

但是,我想要做的是能够使用Apache来处理身份验证,以便:

  1. 我没有给每个人发密码
  2. 我可以使用Apache的BasicAuth拥有多个用户名和密码
  3. 对于内部用户,我不必提示输入密码

编辑:关于更丰富的身份验证的第二部分已移至新问题

这或多或少是我现在所拥有的:

<VirtualHost *:80>
  ServerName sub.domain.com

  ProxyPass        / http://192.168.1.253:8080/endpoint
  ProxyPassReverse / http://192.168.1.253:8080/endpoint

  # The endpoint has a mandatory password that I want to avoid requiring users to type
  # I.e. something like this would be nice (but does not work)

  # ProxyPass        / http://username:password@192.168.1.253:8080/endpoint
  # ProxyPassReverse / http://username:password@192.168.1.253:8080/endpoint

  # Also need to be able to require a password to access proxy for people outside local subnet
  # However these passwords will be …
Run Code Online (Sandbox Code Playgroud)

apache reverse-proxy apache2 mod-proxy basic-authentication

20
推荐指数
2
解决办法
4万
查看次数

ActiveMerchant:如何在使用不支持void操作的网关时授权卡?

我正在使用ActiveMerchant处理Ruby on Rails应用程序的计费组件.我们选择的支付网关是PaymentExpress.

我看到的代码示例如下所示,使用authorize()void()测试卡的有效性:

def test_card!
  auth_response = gateway.authorize(100, card)
  gateway.void(auth_response.authorization) if auth_response.success?
  raise AuthorizationFailed.new(auth_response) unless auth_response.success?
end
Run Code Online (Sandbox Code Playgroud)

但是,PaymentExpress不支持void操作.有没有其他方法来执行此授权操作,或者可以省略无效操作,考虑到PaymentExpress等网关在7天后过期授权请求?

void在文档或Google中没有提到授权,也没有任何关于它有多重要的迹象.

一些帮助?

ruby payment ruby-on-rails credit-card payment-gateway

6
推荐指数
1
解决办法
777
查看次数

rails controller respond_to格式有两个扩展名(例如tar.gz)

是否有一种机制或接受的方法来响应具有更复杂格式扩展的请求?

我的具体方案涉及返回plist文件.但是,我有时需要将此文件作为XML plist文件返回,有时作为二进制plist文件.

我认为URL组成了,/resources.xml.plist并且/resources.binary.plist将是区分它们的好方法.然后,我需要添加一个MIME类型binary.plist和一个for xml.plist,然后以某种方式响应这些格式.

有没有人知道如何实现这一目标和/或有更好的方法的想法?

ruby-on-rails respond-to mime-types

4
推荐指数
1
解决办法
1276
查看次数

Apache2 - 使用BasicAuth授权用户使用位置,但仅限本地子网外的用户使用

在我的Apache 2配置中,我有一个VirtualHost看起来像这样的东西:

<VirtualHost *:80>
  ServerName sub.domain.com

  # username:password sent on to endpoint
  RequestHeader set Authorization "Basic dXNlcm5hbWU6cGFzc3dvcmQ=="

  ProxyPass        /xyz http://192.168.1.253:8080/endpoint
  ProxyPassReverse /xyz http://192.168.1.253:8080/endpoint

  <Location /xyz>
    # This needs to let users through under the following circumstances
    #   * They are in 192.168.1.0/24
    #   * They have a valid user in a htpasswd file

    # So what goes here?
  </Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我正在使用虚拟主机作为网络上另一台服务器(我称之为端点)的反向代理.

我试图找出一种配置,允许网络内部的用户sub.domain.com自动为端点提供服务.但是,应提示网络外的用户提供凭据

端点需要一个我使用RequestHeader(我想要的)隐藏的密码.外部用户的密码应该是不同的,需要是BasicAuth,从htpasswd文件中获取用户列表.

apache apache2 apache-config basic-authentication

1
推荐指数
1
解决办法
1万
查看次数

我是C的新手,有人可以解释为什么这个字符串的大小可以改变吗?

我从来没有真正做过多少C但是我开始玩它了.我写的小片段像下面这样去理解的关键结构/功能的使用和行为C中的一个下面我写试图理解之间的区别char* stringchar string[]如何则字符串的长度工作.此外,我想看看是否sprintf可以用来连接两个字符串并将其设置为第三个字符串.

我发现我用来存储其他两个串联的第三个字符串必须用char string[]语法设置,否则二进制文件会死掉SIGSEGV (Address boundary error).使用数组语法设置它需要一个大小,所以我最初通过将其设置为其他两个字符串的组合大小来开始.这似乎让我足够好地执行连接.

但出于好奇,我尝试将"连接"字符串扩展为比我分配的字符更长.令我惊讶的是,它仍然有效,字符串大小增加,可能会printf很好.

我的问题是:为什么会发生这种情况,它是无效还是有风险/缺点?此外,为什么char str3[length3]有效但在行尝试执行char str3[7]时会导致"SIGABRT(Abort)" sprintf

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main() {
    char* str1 = "Sup";
    char* str2 = "Dood";

    int length1 = strlen(str1);
    int length2 = strlen(str2);
    int length3 = length1 + length2;

    char str3[length3];
    //char str3[7];

    printf("%s (length %d)\n", str1, length1);           // Sup (length 3)
    printf("%s (length %d)\n", str2, length2);           // …
Run Code Online (Sandbox Code Playgroud)

c string printf char

0
推荐指数
2
解决办法
798
查看次数