您的工作环境是否使用Harvest SCM?我现在已经在两个不同的地方使用它,发现它令人震惊.在一种情况下,我编写了一个转换脚本,因此我可以在本地使用CVS,然后在我睡觉时每天将更改导入Harvest系统.尽管有80%的程序员在为不同的东西哭泣,但该公司对使用Harvest感到狂热.这是不必要的复杂,缓慢和沉重.现在,我的工作要求就是在我工作的地方没有使用Harvest.
还有其他人之前使用过Harvest吗?你有什么经历?和我一样糟糕?您是否采用了其他不同的解决方法?为什么今天仍然购买此产品?
我正在编写一个将集成Web应用程序(即Harvest)的应用程序。该Web应用程序支持通过进行授权OAuth2
。
工作流程似乎是:
将用户定向到可以对其进行身份验证并授予我的应用程序许可的特定URL。
在第一个请求中,我应该提供一个回调uri来接收授权令牌。
使用发送的授权令牌代表用户发出请求。
第一部分看起来很简单,但是回调uri应该是什么?这不是一个网站,没有公开的网络界面。
有没有人有一个简单的例子,用Python向RESTful API发送XML POST请求?我试图使用urllib2 Python库在Harvest API中"创建一个新项目",没有运气.有效内容变量是一个有效的XML文档,它是文档的近似复制/粘贴(在"创建新项目"标题下),如下所示:
http://www.getharvest.com/api/projects
这是我试图执行的代码.
def postRequest():
""" Makes POST request to url, and returns a response. """
url = 'http://subdomain.harvestapp.com/projects'
opener = urllib2.build_opener()
opener.addheaders = [('Accept', 'application/xml'),
('Content-Type', 'application/xml'),
('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (self.username, self.password))[:-1]),
('User-Agent', 'Python-urllib/2.6')]
req = urllib2.Request(url=url, data=payload)
assert req.get_method() == 'POST'
response = self.opener.open(req)
print response.code
return response
Run Code Online (Sandbox Code Playgroud)
我收到响应代码200(状态确定)而不是响应代码201(已创建)...这对于Harvest支持人员来说是一个问题吗?
任何人都有的提示将不胜感激.
谢谢,杰夫.
我在一家SaaS公司工作,该公司每六周向我们的客户发布新功能和错误修复程序.当我们编写代码更改时,它们会在到达生产服务器之前通过不同的步骤(如状态机).根据是在常规开发周期中进行更改还是作为紧急修复,步骤会有所不同.我们目前正在使用Harvest来管理这些步骤,并跟踪正在向客户发布的代码(功能和错误修复程序包),从这个意义上讲,它运行良好.
不幸的是,从程序员的角度来看,Harvest既昂贵又难以使用.分支和合并是一场噩梦.所以我们正在考虑转向Mercurial.Mercurial似乎在这些领域表现出色.但是,Mercurial似乎不是用于跟踪更改或管理上述过程,而是仅用于SCM.
问:在发布过程中我们有什么选择,当然还有其他SaaS公司(例如Google,Flickr,Facebook,LinkedIn)在将代码发布到生产服务器之前需要质量控制吗?
问:尝试在Mercurial中构建流程是不是一个坏主意,还是我们需要与Mercurial一起使用其他工具?
[编辑] 为了澄清,这是我们(建议的)分支结构.
以下是我们目前在Harvest中的流程:
Hotfix <--> Test Level 1 <--> Test Level 2 <--> Master (Production)
Feature <--> Test <--> Release Test <--> Master (Production)
Run Code Online (Sandbox Code Playgroud)
我不是在寻找一个bug跟踪器,而是一个部署工具,它可以帮助我们跟踪和部署已经过我们的测试人员验证的代码(发布分支中的代码).如果同时处理多个修补程序,我们需要能够一起测试它们,如果有人破坏了代码,我们需要能够"降级"代码,将更改改回工艺流程中的一步.今天,这两个开发人员可以"推动"他们对测试级别1的更改,并且可以同时测试两个更改的系统.如果一个开发人员的更改只有在与其他开发人员的代码一起时才会中断,那么很容易从测试级别1降级.
试图让它发挥作用。我在参数列表后不断收到 Missing ) 。(第 6 行,文件“Code”)驳回。我仔细检查了我的括号,但无济于事。我错过了什么吗?
我希望这是一个合理的问题。谢谢。
function myFunction() {
var url = "https://company.harvestapp.com/people";
var headers = {
"Accept": "application/xml",
"Content-Type": "application/xml",
"Authorization": "Basic " + Utilities.base64Encode(dude@dude.com +":"+pw)
};
var response = UrlFetchApp.fetch(url,headers);
var text = response.getResponseCode();
Logger.log(text);
}
Run Code Online (Sandbox Code Playgroud) 所以我可能不会这样做,但在这里:
我有一个应用程序引用4个SQL Server程序集
应用程序必须适用于SQL 2008和2010.
我让这个工作的唯一方法是让我的应用程序引用我的SQL程序集的"通用"路径.然后在我的MSBuild项目中,我将2008程序集复制到'generic'文件夹并编译我的应用程序.我在2012年再次这样做.
我有一个像Tools\Release\V2008和Tools\Release\V2010这样的文件夹.这些文件夹包含所有EXE和所需的DLL(包括4个sql server).我对这些文件夹运行HEAT.
但是,当我对每个文件夹运行热量时,每个文件夹具有相同的目录ID但不同的组件,我得到2个wxs文件,每个文件具有相同的文件(预期),但每个文件组件和文件ID在2个wxs文件中是相同的.
例:
MSBuild Command:
<Exec Command=""$(WixTools)\heat.exe" dir $(DeploymentRoot)\Tools\V2008 -dr TOOLS -cg Tools2008Component -var var.Tools2008Path -gg -scom -sreg -sfrag -srd -o $(heatOutputPath)\cmp2008ToolsFrag.wxs"/>
WXS File
<DirectoryRef Id="TOOLS">
<Component Id="cmp04831EC1F8BB21C028A7FC875720302F" Guid="*">
<File Id="fil09727A8BFD32FDCE7C743D6DD2008E7C" KeyPath="yes" Source="$(var.Tools2008Path)\AL3Util.exe" />
</Component>
MSBuild Command:
<Exec Command=""$(WixTools)\heat.exe" dir $(DeploymentRoot)\Tools\V2012 -dr TOOLS -cg Tools2012Component -var var.Tools2012Path -gg -scom -sreg -sfrag -srd -o $(heatOutputPath)\cmp2012ToolsFrag.wxs"/>
WXS file
<DirectoryRef Id="TOOLS">
<Component Id="cmp04831EC1F8BB21C028A7FC875720302F" Guid="*">
<File Id="fil09727A8BFD32FDCE7C743D6DD2008E7C" KeyPath="yes" Source="$(var.Tools2012Path)\AL3Util.exe" />
</Component>
Run Code Online (Sandbox Code Playgroud)
如何让每个WXS文件具有唯一的组件和文件ID?或者 - 我怎样才能做得更好:)
谢谢!
首先,我已经使用 Python 大约几天了,所以我不一定知道最佳实践或所有术语......但。我通过逆向工程学得最好,下面的代码基于 Harvest 的官方文档和我在 google-fu 中找到的其他内容。
我的请求是从 Harvest 下载所有时间条目记录并保存为 JSON(或者最好是 CSV 文件)。
来自 Harvest Git Hub 的官方 Python 示例
这是我改编的代码(包括所有输出,这在最终代码中不是必需的,但对我的学习很方便):
import requests, json, urllib.request
#Set variables for authorisation
AUTH = "REDACTED"
ACCOUNT = "REDACTED"
URL = "https://api.harvestapp.com/v2/time_entries"
HEADERS = { "Authorization": AUTH,
"Harvest-Account-ID": ACCOUNT}
PAGENO = str("5")
request = urllib.request.Request(url=URL+"?page="+PAGENO, headers=HEADERS)
response = urllib.request.urlopen(request, timeout=5)
responseBody = response.read().decode("utf-8")
jsonResponse = json.loads(responseBody)
# Find the values for pagination
parsed = json.loads(responseBody)
links_first = parsed["links"]["first"]
links_last = parsed["links"]["last"]
links_next = parsed["links"]["next"] …
Run Code Online (Sandbox Code Playgroud)