小编Mat*_*age的帖子

Ruby on Rails 3表单中的_snowman参数是什么用的?

在Ruby on Rails 3(目前正在使用Beta 4)中,我看到当使用form_tagform_for帮助时,会出现一个名为_snowman☃(Unicode\x9731)的隐藏字段.

那么,这是为了什么?

forms unicode ruby-on-rails

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

两个Rails应用程序之间的共享模型 - Workflow的理想解决方案是什么?

我目前正在开发一个Rails 3项目,该项目分为四个部分:

  • 面向公众的网站
  • 管理网站/后端
  • 模特
  • 用于第三方数据访问的API

由于模型在三个关键组件之间共享,我希望它们远离一个主项目,但是每个部分都需要访问模型,但我不想重复代码并且在任何地方都有不同的版本.

目前我在gem中有模型代码,在每个项目的Gemfile中我使用以下行引用它们:

gem "my_models", :path => "../my_models/"
Run Code Online (Sandbox Code Playgroud)

但是,当我部署到我们的测试服务器以供我的同事评估系统时,我需要从外部存储库中提取模型,因此我将以上行替换为以下内容:

gem "my_models", :git => "git@private.repository.com:username/my_models.git"
Run Code Online (Sandbox Code Playgroud)

这在它自身运行良好,但它在"版本"方面非常笨重(即我每次希望将更改部署到测试服务器时都需要碰撞版本),切换线路以使用git而不是本地,并确保我正确地推送文件.

以前我使用的是共享的git子模块,但这很尴尬.

我宁愿不把所有内容都构建成一个大型项目,因为这些项目往往变得怪异且难以维护,如果可能的话我也想分开关注点,因此我对管理站点所做的任何更改都没有太多有可能影响其他组件 - 显然这些模型有可能引发问题,但这是我已经考虑和理解的风险.

当涉及到这样的事情时,那里的人们会提出什么建议呢?或者,我是否完全采用了错误的方式?

一些额外的背景:

这个应用程序是对现有网站的重写,遵循"将所有内容整合到一个项目中"的模式 - 不幸的是,这里有两个问题:

  1. 该应用程序开发得很糟糕 - 我继承了这个项目,当我第一次拿起它时,每个页面的加载时间约为2分钟,只有一个用户 - 这已经减少但仍然存在问题
  2. 我们目前处于当前站点的容量限制,我们预计在未来6个月内我们将需要承担更多负载 - 然而使用"一体化"应用程序进行扩展意味着我们将在扩展时浪费资源网站的后端不需要它.

基本上我要分开两件事 - 前端(公共网站和API)和后端 - 我对软件开发的所有了解都告诉我,将所有这些结合在一起并不是一个理想的解决方案(过去的历史表明我认为,在确保前端性能方面,将这两者分开是一个很好的举措.

也许我需要从另一个角度来看这个 - 保持每个项目中的模型,而不是在项目之间共享它们,每个功能区域都有一个简化的功能子集(即后端需要知道谁创建了一个帖子,但是前端并不真正关心它,因此在阅读模型时省略了这种逻辑).

ruby-on-rails backend rails-models

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

如何让Rails 3本地化我的日期格式?

我正在开发一个Rails 3项目,在该项目中可以在表单中输入日期.带有日期的文本字段使用日期选择器,因此不会担心以错误的格式输入日期,但是日期以:db格式显示(例如2010-01-21).

(注意:这特别是在表单字段中 - 例如<%= f.text_field :publish_date %>,应该自动使用:默认格式,并且不需要提供值)

我尝试添加具有以下日期配置的自定义区域设置:

date:
    formats:
      # Use the strftime parameters for formats.
      # When no format has been given, it uses default.
      # You can provide other formats here if you like!
      default: "%d/%m/%Y"
      short: "%b %d"
      long: "%B %d, %Y"
Run Code Online (Sandbox Code Playgroud)

然后将我的语言环境设置为this(config.i18n.default_locale = "en-AU")然而这似乎没有采取,它变得非常令人沮丧.

该应用程序最终将支持许多语言环境,因此在应用程序启动时设置初始化程序以覆盖日期格式并不合适,我知道这应该可行 - 我猜这里错过了一些东西.

语言环境文件是:config/locales/en-AU.yml并且在我的application.rb中我包括:

config.i18n.load_path += Dir[Rails.root.join("config", "locales", "*.yml").to_s]
config.i18n.default_locale = "en-AU"
Run Code Online (Sandbox Code Playgroud)

在我的application.rb文件中.

localization ruby-on-rails internationalization ruby-on-rails-3

41
推荐指数
3
解决办法
4万
查看次数

绑定WPF样式

我正在尝试创建一个自定义控件 - 一个按钮 - 根据数据上下文中属性的值,它将应用多种样式.

我在想的是使用类似的东西:

<Button Style="{Binding Path=ButtonStyleProperty, Converter={StaticResource styleConverter}}" Text="{Binding Path=TextProp}" />
Run Code Online (Sandbox Code Playgroud)

在代码中......实现一个IValueConverter,它在ConvertTo方法中执行类似下面的代码:

switch(value as ValueEnums)
{
    case ValueEnums.Enum1:
        FindResource("Enum1ButtonStyle") as Style;
    break;

    ... and so on.
} 
Run Code Online (Sandbox Code Playgroud)

但是我不完全确定如何拉出样式对象,即使这是可能的......

我正在做的事情是处理DataContextChanged事件,然后将处理程序附加到PropertyChanged绑定到按钮的对象的事件 - 然后在那里运行switch语句.

它不是很完美,但在我找到一个更好的解决方案之前,我似乎必须使用它.

data-binding wpf styles

34
推荐指数
3
解决办法
5万
查看次数

具有不同汇编版本的二进制反序列化

我有一个项目使用BinaryFormatter序列化字符串和bool的结构集合?数据类型.

序列化/反序列化工作正常,但是如果我要更改执行工作的程序集,则无法反序列化,因为二进制文件中的标头指示它需要Assembly x而不是Assembly y处理数据.

是否可以将序列化/反序列化设置为与程序集无关?

.net serialization binaryformatter assemblyversions

26
推荐指数
3
解决办法
2万
查看次数

乘客托管Rails app*痛苦*慢,但服务器是一个野兽

我一直在努力部署一个相对较大的Rails应用程序(Rails 2.3.5),并且最近进行了一些负载测试,我们发现该站点的吞吐量远低于预期的流量水平.

我们运行的是标准的32位服务器,带有Centos的3GB内存,我们运行的是Ruby Enterprise Edition(最新版本),Passenger(最新版本)和Nginx(最新版本) - 当网站运行时只有一两个用户很好(正如你所料)然而当我们试图将负载增加到大约50个并发请求时,它完全消失了.(Apache Bench报告~2.3 req/sec,这很糟糕)

我们正在运行RPM并尝试确定加载问题的位置,但它在Rails,SQL和Memcached中的分布非常均匀,因此我们或多或少地经历并优化代码库.

出于绝望,我们开发了一个大型EC2实例(Ubuntu 9.10,7.5GB RAM,2个计算单元/内核)并设置了与原始服务器相同的配置,虽然有更多资源我们仍然看到可悲的结果.

所以,在花了太多时间尝试优化,玩缓存配置等后,我决定测试一些杂种的吞吐量,而ta-da,它们的性能远远超过Passenger.

目前配置是15x Mongrels通过Nginx代理,我们似乎只是满足我们的负载要求,但它还不足以让我对上线感到满意......我想知道的是,如果有人知道这可能的原因...?

我对passenger/nginx的配置是:

  • Nginx工作者:尝试过1到10,通常是3.
  • 乘客最大泳池大小:10 - 30(是的,这些数字相当高)
  • 乘客全球排队:尝试打开和关闭.
  • NGinx GZip:是的

可能需要注意的是,我们已将nginx max客户端主体大小增加到200米,以允许大文件上传.

无论如何建议真的很感激,而杂种工作得很好,它改变了我们做很多事情的方式,我真的更喜欢使用乘客 - 此外,是不是应该让这更容易,表现更好?

ruby-on-rails passenger nginx

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

WPF Dispatcher.Invoke'hanging'

我有一个有点复杂的WPF应用程序,当尝试使用调度程序在UI线程上调用调用时,似乎是"挂起"或卡在Wait调用中.

一般过程是:

  1. 处理按钮上的单击事件
  2. 创建一个新线程(STA),其中:创建演示者和UI的新实例,然后调用Disconnect方法
  3. 断开然后在名为Name的UI上设置属性
  4. 然后,Name的setter使用以下代码来设置属性:

    if(this.Dispatcher.Thread != Thread.CurrentThread)
    {
        this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate{
            this.Name = value; // Call same setter, but on the UI thread
        });
        return;
    }

    SetValue(nameProperty, value); // I have also tried a member variable and setting the textbox.text property directly.
Run Code Online (Sandbox Code Playgroud)

我的问题是,当调用 dispatcher invoke方法时,它似乎每次都挂起,并且callstack指示它处于休眠状态,等待或加入Invoke实现.

那么,有什么我做错了,我错过了,显而易见或没有,或者有更好的方法调用UI线程来设置这个属性(和其他)?

编辑:解决方案是在线程委托的末尾调用System.Windows.Threading.Dispatcher.Run()(例如,正在执行工作的地方) - 感谢所有帮助过的人.

.net c# wpf invoke dispatcher

21
推荐指数
3
解决办法
2万
查看次数

黄瓜故事的会话变量

我正在为一个"注册"应用程序编写一些Cucumber故事,该应用程序有许多步骤.

而不是写一个Huuuuuuuge故事来同时覆盖所有步骤,这将是坏事,我宁愿像常规用户一样在控制器中完成每个动作.我的问题在于我将在第一步中创建的帐户ID存储为会话变量,因此当访问步骤2,步骤3等时,将加载现有的注册数据.

我知道能够controller.session[..]在RSpec规范中访问但是当我尝试在Cucumber故事中执行此操作时它失败并出现以下错误(并且,我也读过某处这是一个反模式等...):

使用controller.session [:whatever]或session [:whatever]

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.session (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

使用会话(:无论如何)

wrong number of arguments (1 for 0) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)

因此,似乎加入会话存储是不可能的.我想知道的是,是否可能(我想哪个会是最好的......):

  1. 模拟会话商店等
  2. 在控制器和存根中有一个方法(例如get_registration,它分配一个实例变量......)

我查看了RSpec书(好吧,浏览过)并浏览了WebRat等,但我还没有真正找到问题的答案......

为了澄清一点,注册过程更像是一个状态机 - 例如用户在注册完成之前通过四个步骤前进 - 因此"登录"实际上不是一个选项(它打破了网站工作原理的模型) )...

在我对控制器的规范中,我能够根据会话var加载对方法的调用 - 但是我不确定'antipattern'行是否也适用于存根和模拟?

谢谢!

testing rspec ruby-on-rails webrat cucumber

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

运行RemovePreviousVersion时,MSI不会安装所有文件

我有一个使用WiX版本3的MSI版本.

我们正在部署的产品的所有先前安装程序在指定的配置下工作正常(即:如果存在先前版本,删除,然后安装新版本) - 但是,我们构建的新MSI在运行时不会安装所有文件'先删除'路径.

如果我们手动删除现有安装,然后运行新版本,则会安装所有文件 - 当我在Orca中检查MSI文件时,会显示文件和功能,似乎没问题.

我们已经尝试运行详细和额外的日志记录打开(/l*vx)然而我们只能看到文件是否未被注册然后安装.

有什么想法或建议吗?这让我们走上了墙.

installer windows-installer wix wix3

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

应用程序日志聚合,管理和通知

我想知道每个人在他们的系统上使用什么来记录日志管理和日志聚合.

我在一家公司工作,该公司为所有应用程序使用.NET,所有系统都是基于Windows的.目前,每个应用程序都会查看自己的日志记录和失败通知(例如,如果应用程序A失败,它将向管理员发送自己的'求助电话').

虽然这种现行做法有点笨拙且难以管理.我一直试图找到一些方法来使这项工作更好,我想出了以下内容:

  • log4net&Chainsaw(啊,如果有效的话).
  • 通过log4net或其他框架记录到中央数据库并滚动我们自己的管理工具.
  • 记录到Windows事件日志,并使用MOM或System Center Operations Manager聚合和管理这些服务器及其应用程序.
  • 一个手动解决方案,将所有日志文件吸收到一个点,并在它们之间运行一些魔法.

基本上我们所追求的是能够将日志条目全部拉到一起并允许在它们之间运行某些分析的东西,并且使用一种基于事件的系统,例如,当有30多个警告时发出警告电子邮件最近x几分钟内应用程序的级别日志.

那么我有什么遗漏,或其他人可以建议的东西?

logging aggregation

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