有没有一种简单的方法可以将Scala Jar(~1MB)复制到服务器,然后让SBT获取所需的依赖项(~40MB)并运行它?
我已经看过sbt-onejar和sbt-assembly,但是这些将所有依赖项捆绑到一个jar中,在我的情况下变为~45MB,这需要很长时间才能上传到服务器.
目前我使用Capistrano从GitHub检出我的代码并编译它.然后我使用xsbt-start-script-plugin运行它 - 类似于Heroku管理它的方式.
问题是编译需要很长时间在服务器上(我正在使用EC2).带有~600MB冲头的EC2 Micro需要很长时间,有时会随机杀死该过程.我正在使用目前正在运行的EC2 Small实例(1.7GB ram),但随着代码库的增加而我添加了更多服务器,它可能会出现问题.
理想的工作流程是在本地(或在CI服务器上)编译Scala源,复制到服务器,让SBT引入自上次构建以来添加的其他依赖项(现有的将来自本地缓存的常春藤repo),然后为我提供一个简单的在Ubuntu 10.04上使用Upstart运行服务的脚本.
我还想了解其他Scala用户如何部署他们的代码.
(OP后来发布的"回答"代码)
FWIW这里是我的构建文件.
import com.typesafe.startscript.StartScriptPlugin
name := "XXX"
version := "0.1.0"
scalaVersion := "2.9.1"
resolvers += "XXX" at "http://repo.XXX.XXX"
libraryDependencies += "XXXX" %% "backend" % "0.1.0"
seq(StartScriptPlugin.startScriptForJarSettings: _*)
mainClass in Compile := Some("XXX.app.Main")
Run Code Online (Sandbox Code Playgroud)
resolvers += Classpaths.typesafeResolver
addSbtPlugin("com.typesafe.startscript" % "xsbt-start-script-plugin" % "0.5.0")
addSbtPlugin("com.eed3si9n" % "sbt-dirty-money" % "0.0.1")
Run Code Online (Sandbox Code Playgroud) 在Unix群集上作为批处理作业运行R脚本时遇到问题。问题是当尝试在环境中加载库时,R无法找到该库。我举一个例子。我将使用基本的R脚本名称sess.R:
print(.libPaths())
library("gtools")
print(sessionInfo())
Run Code Online (Sandbox Code Playgroud)
如果我只是使用以下命令从命令行运行此脚本:
$ Rscript sess.R
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
[1] "/usr/lib64/R/library" "/usr/share/R/library"
R version 3.2.3 (2015-12-10)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS release 6.6 (Final)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets base
other attached packages:
[1] gtools_3.5.0
Run Code Online (Sandbox Code Playgroud)
库“ gtools”已正确加载,脚本正在运行。但是,如果我编写一个简单的批处理作业(我将在该作业中包含几个可选参数,包括错误和输出文件),例如:
#!/bin/bash
#SBATCH --output=sess.out
#SBATCH --error=sess.err
Rscript sess.R
Run Code Online (Sandbox Code Playgroud)
一秒钟后作业失败。我得到的两个输出文件当然是sess.out和sess.err。Sess.out包含库目录:
[1] "/usr/lib64/R/library" "/usr/share/R/library"
Run Code Online (Sandbox Code Playgroud)
这似乎与从命令行运行Rscript时的相同,所以那里没有错误。但是,由于脚本已终止,因此无法打印Info Session。sess.err文件包含以下错误:
Error in library("gtools") : there is …Run Code Online (Sandbox Code Playgroud) 我们的OData端点是自托管的(OWIN)。对于单个请求:创建,更新,修补和删除所有内容都很好,但是问题是当我发送包含多个操作的批处理请求时,基本授权出现了问题。我读了很多文章,但仍然无法解决问题。在OData文档中说:
代表单个请求的每个MIME部件正文都不得包含:
• authentication or authorization related HTTP headers
Run Code Online (Sandbox Code Playgroud)
因此,如果我将Authorization设置为批处理请求,但未将其设置为批处理中的每个请求,那么OnAuthorization方法中的actionContext.Request.Headers.Authorization会为null。我的问题是:如何从该批次中的请求获取批次请求的授权标头?
在端点中启用了“批次”:
HttpConfiguration config = new HttpConfiguration();
var odataBatchHandler = new DefaultODataBatchHandler(new HttpServer(config));
config.MapODataServiceRoute("ODataApi", null, builder.GetEdmModel(), odataBatchHandler);
config.Count().Filter().OrderBy().Expand().MaxTop(null).Select();
appBuilder.UseWebApi(config);
Run Code Online (Sandbox Code Playgroud)
这是授权逻辑:
public class ODataBasicAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
//Question: here Authorization property is null, because this is Get request for SAStudent
if (actionContext.Request.Headers.Authorization == null || actionContext.Request.Headers.Authorization.Scheme != "Basic")
{
HandleUnauthorizedRequest(actionContext);
}
else
{
ISession session = Login(actionContext.Request);
if (session == null)
{
HandleUnauthorizedRequest(actionContext);
}
else …Run Code Online (Sandbox Code Playgroud) 所以 - 这是代码
@echo off
setlocal
for %%a in (a A j J z Z) do for %%c in (d D) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")
for %%a in (Blue blue BLUE Red red RED) do for %%c in (Pink pink PINK) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")
Run Code Online (Sandbox Code Playgroud)
结果如下:
Microsoft Windows [Version 10.0.19042.804]
(c) 2020 Microsoft Corporation. All rights reserved.
"d" geq "a" …Run Code Online (Sandbox Code Playgroud) 我一直在编写代码来批量旋转文件夹内的 pdf 文件,但我找不到迭代和更改旋转文件的目标文件夹的方法,我的目的是将新文件保存在另一个文件夹,谢谢
import PyPDF2
from os import listdir
di = "C:\z_PruebPy\pdf"
archs = []
listarch = []
loc = r"C:/z_PruebPy/pdf/"
for x in listdir(di):
archs.append(loc+x)
for arch in listarch:
pdf_in = open(arch, 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_in)
pdf_writer = PyPDF2.PdfFileWriter()
for pagenum in range(pdf_reader.numPages):
page = pdf_reader.getPage(pagenum)
page.rotateClockwise(270)
pdf_writer.addPage(page)
pdf_out = open(arch, 'wb') #????????
pdf_writer.write(pdf_out)
pdf_out.close()
pdf_in.close()
Run Code Online (Sandbox Code Playgroud) 如何将退出状态从HTA(vbscript)返回到调用批处理文件?
我的批处理文件代码
@echo OFF
echo Configuring Test...
call AppConfigurationEditor.hta
call TestConfigurationEditor.hta
Run Code Online (Sandbox Code Playgroud)
1.如果用户点击第一个HTA上的CANCEL按钮,我不想运行第二个HTA.
2.Batch脚本调用/立即显示第二个HTA,而不是等到第一个HTA关闭.
我正在阅读《竞争性编程 1》一书中的 Dijkstra 算法。在实现程序中,他们写了这样的内容:
#define pair<int,int> ii;
priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)
如果我们将整数 s 作为源,则实现显示像这样推送对 (cost,source)(节点编号从 1 到 n):
pq.push(ii(0,s)) ;
Run Code Online (Sandbox Code Playgroud)
我的问题是我们正在将一对成本和节点放入优先级队列中。但是其他两个参数(即向量和更大)在priority_queue声明中做什么呢?
priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)
我尝试声明类似的内容:
priority_queue< ii > pq ;
Run Code Online (Sandbox Code Playgroud)
并且代码有效(在我尝试过的那些测试用例上)。
谁能告诉我该声明的含义:
priority_queue< ii,vector<ii>,greater<ii> > pq ;
Run Code Online (Sandbox Code Playgroud)
上面的声明和上面的声明有什么区别
priority_queue< ii > pq ;
Run Code Online (Sandbox Code Playgroud)
宣言 ?
如何在用parantheses('if'或'for'-loop)包围的范围中设置结果变量.结果是正确的(>> RESULT:aaa = bbb),直接调用过程,并且在for循环或if语句中使用时失败(>> RESULT:ccc =).
:: =====================================
@setlocal
@echo off
@rem (1)
call :testReturn aaa
echo RESULT: aaa = %aaa%
@rem (2)
if "1" == "1" (
call :testReturn ccc
echo RESULT: ccc = %ccc%
)
goto :eof
:testReturn
set %~1=bbb
exit /b
endlocal
Run Code Online (Sandbox Code Playgroud)
谢谢!!
该脚本可以将某些字符替换为文件名中的指定字符,但不适用于tilde ~。
以下两个部分工作正常。
@echo off
setlocal enabledelayedexpansion
for %%a in (*_*) do (
set file=%%a
ren "!file!" "!file:_=A!"
)
for %%a in (*-*) do (
set file=%%a
ren "!file!" "!file:-=B!"
)
Run Code Online (Sandbox Code Playgroud)
但是这部分不起作用。
for %%a in (*~*) do (
set file=%%a
ren "!file!" "!file:~=C!"
)
Run Code Online (Sandbox Code Playgroud)
为什么更换~不起作用以及如何解决?
可以启动不同的firefox配置文件 firefox -P <profile-name> -no-remote
但是,当我想同时在linux中使用批处理文件启动多个配置文件时,只有第一个配置文件启动,后续配置文件才会在上一个配置文件退出之前启动.
目前我没有成功使用这个批处理脚本:
#! /bin/bash
firefox -P "profile 1" -no-remote
firefox -P "profile 2" -no-remote
firefox -P "profile 3" -no-remote
Run Code Online (Sandbox Code Playgroud)
基本上,profile 1开始很好,但profile 2直到我先退出firefox才开始; 在退出前一个命令之前,下一个命令不会执行.
在Windows中,我已成功设法使用此bat文件同时启动多个firefox:
start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "profile 1"
start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "profile 2"
start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "profile 3"
Run Code Online (Sandbox Code Playgroud)
start帮助后的引号完成此操作,之后没有引号start,配置文件并非都在同一时间启动,但在linux中我不知道如何完成此操作?
当这个程序中的最后一个命令:
If %V_EOM% EQU V_Day Set V_Type = M
Run Code Online (Sandbox Code Playgroud)
执行后,.BAT文件运行就会消失,并且不会执行以下暂停.我只是没有看到问题.
Rem XCopy C: Britt* Folders to Backup
Rem *************************************
Rem Set EOM/Daily Switch
Set V_Type = D
Rem Set /d Switch
Set V_DSwitch = /d
Set V_Output_Drive = G:\
Set V_File_Name_1 = XCopy
Set V_File_Name_2 = Backup
Set V_File_Name_3 = Daily
Date /t
Time /t
set V_Date = %date:~0,20%
set V_DOW = %date:~0,3%
set V_Mo= %date:~4,2%
set V_Day = %date:~7,2%
set V_Yr= %date:~10,4%
Rem EOM Check
If %V_Mo% EQU 04 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有批处理脚本的sqlcmd删除数据库.我遇到的问题是如果myql数据库在sql中不可用,则代码不会进入错误处理程序块.
@echo off
@echo IF ELSE DEMO
sqlcmd -S <servername> -U <username> -P <password> -Q "DROP DATABASE Mytest"
IF ERRORLEVEL 1 goto err_handler
goto done
:err_handler
echo handle the error here
goto end
:done
echo script completion code here
:end
@echo %Message%
pause
Run Code Online (Sandbox Code Playgroud)
它给出了以下输出:
IF ELSE DEMO
Msg 3701, Level 11, State 1, Server HERCULES, Line 1
Cannot drop the database 'Mytest', because it does not exist or you do not have permission.
script completion code here
ECHO is off. …Run Code Online (Sandbox Code Playgroud)